Dlaczego taki temat?

Chciałem znaleźć taki temat, którego choć część wykonania będzie miała wymiar praktyczny. Na grupie MI^2 składającej się głównie ze studentów i absolwentów MiNI PW i MIM UW funkcjonuje projekt CzasDojazdu. Ma on na celu dostarczenie aplikacji wyszukującej w Warszawie pokojów do wynajęcia pod kątem kryterium czasu dojazdu z mieszkania do pracy. Przeglądając go zauważyłem, że część danych pobieranych z portalu gumtree.pl jest błędnie zapisywanych (metraż), niektóre zaś są zupełnie pomijane (czy można palić lub trzymać zwierzęta, jaka jest preferowana płeć). Postanowiłem udoskonalić scraper funkcjonujący w tym projekcie, a na świeżo pobranych danych spróbowac zbudować model przewidujący ceny wynajmowanych pokoi.

Udoskonalenie scrapera - zdobycie danych

Z pomocą pakietu rvest oraz wtyczki SelectorGadget działającej w przeglądarce Chromium udało mi się wydobyć ze stron z ofertami interesujące mnie dane. Kod znaduje się w repozytorium projektu CzasDojazdu. Kolejne rejestry zapisywane są w bazie danych SQLite. Ponieważ wdrożenie kodu na produkcję ze względów organizacyjnych w takich projektach nieco trwa, zdecydowałem się na przerobienie go tak, aby dane zapisywane były do plików *.csv. Przypatrując się pobranym ofertom wiedziałem, że ich liczba przez czas realizacji projektu nie urośnie do dużych rozmiarów.

Przygotowanie do projektu

W ramach przygotowania się do realizacji projektu ukończyłem dwa kursy.

Oraz zapoznałem się z takimi narzędziami jak Crontab, Flume, Hadoop HDFS i Spark (pakiet sparklyr).

Obróbka danych

# Ładowanie bibliotek
library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
library(readr)
library(stringi)

Oferta dotycząca pokoju do wynajęcia na portalu gumtree.pl może zawierać następujące (powtarzalne) opcje wyboru:

  1. Lokalizacja
  1. Do wynajęcia przez
  1. Współdzielenie
  1. Dostępny
  1. Rodzaj nieruchomości
  1. Wielkość (m2)
  1. Liczba pokoi
  1. Palący
  1. Przyjazne zwierzakom
  1. Preferowana płeć
  1. Cena

Zbierane są też dane dotyczące daty dodania oferty, link do ogłoszenia, opis i tutuł. Te jednak tym razem nie będą nas interesować ze względu na swój unikalny charakter.

Przyjrzyjmy się im nieco bliżej.

# Ładowanie danych
dane1 <- read_csv("2016-10-26df.csv")
Parsed with column specification:
cols(
  data_dodania = col_character(),
  lokalizacja = col_character(),
  href = col_character(),
  opis = col_character(),
  adres = col_character(),
  cena = col_character(),
  tytuł = col_character(),
  do_wynajęcia_przez = col_character(),
  współdzielenie = col_character(),
  `wielkość_(m2)` = col_integer(),
  liczba_pokoi = col_character(),
  rodzaj_nieruchomości = col_character(),
  preferowana_płeć = col_character(),
  palący = col_character(),
  przyjazne_zwierzakom = col_character(),
  dostępny = col_character()
)
dane2 <- read_csv("2016-11-17df.csv")
Parsed with column specification:
cols(
  data_dodania = col_character(),
  lokalizacja = col_character(),
  href = col_character(),
  opis = col_character(),
  adres = col_character(),
  cena = col_character(),
  tytuł = col_character(),
  do_wynajęcia_przez = col_character(),
  rodzaj_nieruchomości = col_character(),
  współdzielenie = col_character(),
  liczba_pokoi = col_character(),
  preferowana_płeć = col_character(),
  palący = col_character(),
  przyjazne_zwierzakom = col_character(),
  dostępny = col_character(),
  `wielkość_(m2)` = col_integer()
)
pokoje <- rbind(dane1, dane2) %>% distinct()
rm(dane1, dane2)
# Dane pod lupą - obróbka
dim(pokoje)
[1] 9321   16
str(pokoje)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   9321 obs. of  16 variables:
 $ data_dodania        : chr  "01/10/2016" "01/10/2016" "01/10/2016" "01/10/2016" ...
 $ lokalizacja         : chr  "Białołęka, Warszawa" "Bielany, Warszawa" "Bielany, Warszawa" "Bydgoszcz, Kujawsko - pomorskie" ...
 $ href                : chr  "https://www.gumtree.pl/a-pokoje-do-wynajecia/bialoleka/pokoje-pracownicze-noclegi-pracownicze-dla-firm+-kwatery/100168743856091"| __truncated__ "https://www.gumtree.pl/a-pokoje-do-wynajecia/bielany/pok%C3%B3j-dla-studentki-uksw-wat-awf-uw-od-pa%C5%BCdziernika/100179124557"| __truncated__ "https://www.gumtree.pl/a-pokoje-do-wynajecia/bielany/du%C5%BCy-pok%C3%B3j-w-pobli%C5%BCu-metra/1001791212730910660279809" "https://www.gumtree.pl/a-pokoje-do-wynajecia/bydgoszcz/pokoje-po-remoncie-w-centrum-miasta/1001791361140911038700709" ...
 $ opis                : chr  "Ofertę swoją kierujemy zarówno do dużych firm jak i indywidualnych grup, które wykonują różnego rodzaju prace w Warszawie lub o"| __truncated__ "Wynajme pokój umeblowany/kanapa ikea, szafa, biurko/Do metra stare bielany jest 5 minut.W mieszkaniu jest nowa pralka bosch, lo"| __truncated__ "Duży 20m2 pokój z loggią, w pobliżu metra Wawrzyszew. Pokój umeblowany, internet, widna kuchnia, przedpokój. Bardzo dobra komun"| __truncated__ "Miejsce w jasnym, przestronnym pokoju dwuosobowym o pow.17m2, w \r\nwyremontowanym mieszkaniu w kamienicy. Mieszkanie zlokalizo"| __truncated__ ...
 $ adres               : chr  "Bryły 42" NA "Bielany, Warszawa, Polska" "Gdańska" ...
 $ cena                : chr  "12 zł" "1 000 zł" "Proszę o kontakt" "400 zł" ...
 $ tytuł               : chr  "Pokoje pracownicze, noclegi pracownicze dla firm- kwatery" "POKÓJ DLA STUDENTKI UKSW, WAT, AWF, UW OD PAŻDZIERNIKA!!!!!!!!!!!!" "Duży pokój  w pobliżu metra" "Pokoje po remoncie w centrum miasta" ...
 $ do_wynajęcia_przez  : chr  "Właściciel" "Właściciel" "Właściciel" "Właściciel" ...
 $ współdzielenie      : chr  "Współdzielenie pokoju" "Współdzielenie mieszkania/domu" "Współdzielenie mieszkania/domu" "Współdzielenie pokoju" ...
 $ wielkość_(m2)       : int  NA 80 59 17 NA 25 12 20 80 27 ...
 $ liczba_pokoi        : chr  NA "4 pokoje" "2 pokoje" "3 pokoje" ...
 $ rodzaj_nieruchomości: chr  "Dom" "Mieszkanie" "Mieszkanie" "Mieszkanie" ...
 $ preferowana_płeć    : chr  NA "Kobieta" "Bez preferencji" "Bez preferencji" ...
 $ palący              : chr  NA "Nie" "Nie" "Nie" ...
 $ przyjazne_zwierzakom: chr  NA "Nie" "Nie" "Nie" ...
 $ dostępny            : chr  NA "01/10/2016" "01/10/2016" "03/10/2016" ...
 - attr(*, "spec")=List of 2
  ..$ cols   :List of 16
  .. ..$ data_dodania        : list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
  .. ..$ lokalizacja         : list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
  .. ..$ href                : list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
  .. ..$ opis                : list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
  .. ..$ adres               : list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
  .. ..$ cena                : list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
  .. ..$ tytuł               : list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
  .. ..$ do_wynajęcia_przez  : list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
  .. ..$ współdzielenie      : list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
  .. ..$ wielkość_(m2)       : list()
  .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
  .. ..$ liczba_pokoi        : list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
  .. ..$ rodzaj_nieruchomości: list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
  .. ..$ preferowana_płeć    : list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
  .. ..$ palący              : list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
  .. ..$ przyjazne_zwierzakom: list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
  .. ..$ dostępny            : list()
  .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
  ..$ default: list()
  .. ..- attr(*, "class")= chr  "collector_guess" "collector"
  ..- attr(*, "class")= chr "col_spec"

Z dostępnych kolumn pozostawimy te które są unikalne. Dodatkowo skorzystamy jednak z opisów w celu policzenia ilości występujacych w nich słów.

pokoje %>% names()
 [1] "data_dodania"         "lokalizacja"          "href"                 "opis"                
 [5] "adres"                "cena"                 "tytuł"                "do_wynajęcia_przez"  
 [9] "współdzielenie"       "wielkość_(m2)"        "liczba_pokoi"         "rodzaj_nieruchomości"
[13] "preferowana_płeć"     "palący"               "przyjazne_zwierzakom" "dostępny"            
names(pokoje) <-
  names(pokoje) %>% chartr("ąęółćśźż", "aeolcszz", .)
pokoje <-
  pokoje %>%
  rename(wielkosc  = `wielkosc_(m2)`) %>%
  select(-c(data_dodania, href, adres, tytul, dostepny)) %>%
  mutate(
    liczba_wyrazow = stri_count_words(opis)
  )
pokoje %>%
  select(-opis) %>%
  lapply(
    function(x) {
      x %>%
        table(useNA = "always") %>%
        sort(decreasing = TRUE) %>%
        head(20)
    }
  )
$lokalizacja
.
     Kraków, Małopolskie    Poznań, Wielkopolskie    Wrocław, Dolnośląskie            Łódź, Łódzkie 
                    2894                     1302                      862                      438 
       Mokotów, Warszawa    Śródmieście, Warszawa Praga Południe, Warszawa        Bielany, Warszawa 
                     373                      372                      231                      205 
      Targówek, Warszawa        Ursynów, Warszawa        Katowice, Śląskie           Wola, Warszawa 
                     201                      198                      184                      156 
        Bemowo, Warszawa         Ochota, Warszawa        Lublin, Lubelskie      Białołęka, Warszawa 
                     142                      134                      106                      105 
       Gdańsk, Pomorskie          Ursus, Warszawa   Praga Północ, Warszawa       Żoliborz, Warszawa 
                      96                       68                       66                       62 

$cena
.
Proszę o kontakt           600 zł           700 zł           800 zł           500 zł           550 zł 
            1608              701              536              534              507              458 
          650 zł           750 zł           900 zł         1 000 zł           450 zł           400 zł 
             441              344              322              294              294              293 
          850 zł           950 zł         1 200 zł           380 zł         1 100 zł           350 zł 
             246              179              165              132              128              112 
          300 zł           720 zł 
              57               54 

$do_wynajecia_przez
.
Właściciel       <NA>    Agencja 
      7988        764        569 

$wspoldzielenie
.
Współdzielenie mieszkania/domu          Współdzielenie pokoju                           <NA> 
                          6813                           1423                           1085 

$wielkosc
.
<NA>   12   20   10   15   50   14   60   25   16   18   80   55    9   11   70   13   48   40   65 
2038  614  543  399  360  277  253  225  213  212  205  169  160  136  135  129  128  127  126  111 

$liczba_pokoi
.
                3 pokoje                 2 pokoje                     <NA>                 4 pokoje 
                    2788                     2266                     2248                      816 
      6 lub więcej pokoi Kawalerka lub garsoniera                  5 pokoi 
                     475                      391                      337 

$rodzaj_nieruchomosci
.
Mieszkanie        Dom       <NA>       Inne 
      6619       1421       1056        225 

$preferowana_plec
.
           <NA> Bez preferencji         Kobieta       Mężczyzna 
           3514            2735            2259             813 

$palacy
.
 Nie <NA>  Tak 
4693 4079  549 

$przyjazne_zwierzakom
.
<NA>  Nie  Tak 
4429 3854 1038 

$liczba_wyrazow
.
 45  19  31  44  29  59  36  47  91  22  43  25  35  53  64  26  42  23  33  37 
104 101  95  92  89  88  86  86  84  83  83  82  82  82  82  81  80  79  79  79 

Najwięcej ofert pochodzi z Krakowa i Warszawy (po około 2500). Dodatkowo stolica jako jedyne miasto ma rozróżnione lokalizacje ze względu na dzielnicę. Nie trudno domyślić się, że najdroższe pokoje do wynajęcia będą w największych miastach. Ponieważ znaczna większość ofert pochodzi z Warszawy i Krakowa, ograniczę się więc do tych dwóch miast. Na dalszym etapie można spróbowac przewidzieć czy oferta jest z dawnej czy z obecnej stolicy.

Sprawdźmy rozkład ilości słów w opisach.

hist(
  pokoje$liczba_wyrazow,
  50,
  main = "Histogram liczby wyrazów w opisie oferty",
  xlab = "Liczba wyrazów",
  ylab = "Liczba ofert"
)

Nie trudno było się domyślić, że najczęściej występujące opisy będą krótkie.

Usunę oferty zawierające w cenie informację Proszę o kontakt oraz te z Wymiana/zamiana. Tak samo postąpię z ofertami, które nie dostarczają informacji o powierzchni wynajmowanej przestrzeni. Dla takich kolumn jak do_wynajęcia_przez, wspoldzielenie i liczba_pokoi w miejsce brakujących wartości wstawię "Nie podano", ponieważ ciężko w tych przpadkach doszukać się jakiegoś domyślnego ustawienia. Natomiast w przypadku rodzaj_nieruchomosci brak podanej wartości przypiszę do istniejącej opcji Inne. Kolejno preferowana_plec posiada wartość Bez preferencji i to ona zostanie przypisana w zamian za NA. Kierując się zasadą “Co nie jest prawem zabronione, jest dozwolone” założę, że nieokreślone wartości dla kolumn palacy oraz przyjazne_zwierzakom przyjmują wartości Tak. Na koniec cena zostaje pozbawiona informacji o walucie i zamieniona na liczbę typu Integer, a klasy odpowiednich zmiennych zostają zamienione na faktory.

pokoje <-
  pokoje %>%
  filter(
    grepl(("Warszawa|Kraków"), lokalizacja),
    !(cena %in% c("Proszę o kontakt", "Wymiana/zamiana")),
    !is.na(wielkosc)
  ) %>%
  mutate(
    lokalizacja = lokalizacja %>%
      stri_replace_first_regex(", Warszawa", "") %>%
      as.factor(),
    do_wynajecia_przez = do_wynajecia_przez %>%
      plyr::mapvalues(NA, "Nie podano") %>%
      as.factor(),
    wspoldzielenie = wspoldzielenie %>%
      plyr::mapvalues(NA, "Nie podano") %>%
      as.factor(),
    liczba_pokoi = liczba_pokoi %>%
      plyr::mapvalues(NA, "Nie podano") %>%
      as.factor(),
    rodzaj_nieruchomosci = rodzaj_nieruchomosci %>%
      plyr::mapvalues(NA, "Inne") %>%
      as.factor(),
    preferowana_plec = preferowana_plec %>%
      plyr::mapvalues(NA, "Bez preferencji") %>%
      as.factor(),
    palacy = palacy %>%
      plyr::mapvalues(NA, "Tak") %>%
      as.factor(),
    przyjazne_zwierzakom = przyjazne_zwierzakom %>%
      plyr::mapvalues(NA, "Tak") %>%
      as.factor(),
    cena = stri_extract_all_regex(
      cena, "[[:digit:]]"
    ) %>%
      stri_join_list() %>%
      as.integer()
  )
pokoje %>% summary()
              lokalizacja       opis                cena         do_wynajecia_przez
 Kraków, Małopolskie:1847   Length:3564        Min.   :   1.0   Agencja   : 188    
 Śródmieście        : 286   Class :character   1st Qu.: 550.0   Nie podano: 186    
 Mokotów            : 246   Mode  :character   Median : 700.0   Właściciel:3190    
 Targówek           : 156                      Mean   : 739.4                      
 Praga Południe     : 153                      3rd Qu.: 900.0                      
 Bielany            : 148                      Max.   :8000.0                      
 (Other)            : 728                                                          
                        wspoldzielenie    wielkosc                         liczba_pokoi  rodzaj_nieruchomosci
 Nie podano                    : 207   Min.   :   1.00   2 pokoje                : 929   Dom       : 482     
 Współdzielenie mieszkania/domu:2794   1st Qu.:  15.00   3 pokoje                :1303   Inne      : 216     
 Współdzielenie pokoju         : 563   Median :  37.50   4 pokoje                : 384   Mieszkanie:2866     
                                       Mean   :  44.52   5 pokoi                 : 141                       
                                       3rd Qu.:  60.00   6 lub więcej pokoi      : 198                       
                                       Max.   :1200.00   Kawalerka lub garsoniera: 123                       
                                                         Nie podano              : 486                       
        preferowana_plec palacy     przyjazne_zwierzakom liczba_wyrazow 
 Bez preferencji:2319    Nie:1907   Nie:1709             Min.   :  2.0  
 Kobieta        : 905    Tak:1657   Tak:1855             1st Qu.: 45.0  
 Mężczyzna      : 340                                    Median : 83.0  
                                                         Mean   :106.1  
                                                         3rd Qu.:140.0  
                                                         Max.   :558.0  
                                                                        

Stosując zasadę ograniczonego zaufania (wiele osób mogło pomylić się podczas wystawiania oferty) przyjrzyjmy się bliżej wartościom przyjmowanym przez cenę oraz wielkość. Po nich spodziewalibyśmy się dość silnej korelacji.

plot(cena~wielkosc, pokoje)

Wykres zdecydowanie psują pozycje z ceną powyżej 5000 złotych oraz powierzchnią powyżej 600 metrów kwadratowych. Przyjrzyjmy sie bliżej tym ofertom.

pokoje %>%
  filter(cena == 8000) %>%
  .$opis
[1] "wynajmę duży pokój z balkonem. Zamykany, umeblowany. W mieszkaniu wszystkie potrzebne sprzęty: lodówka, pralka, kuchenka. Pozostałe pokoje zajęte przez osoby pracujące i studiujące także potrzeba osoby spokojnej i sympatycznej. koszty: osoba pojedyncza 800 + opłaty licznikowe para 1000 + opłaty licznikowe kaucja 650 zł. 601131276"

Z treści oferty wynika, że cena za jeden pokój dla osoby to 800 pln. Autor oferty dopisał jeden rząd wielkości do ceny. Przypatrzmy się tym od 3000 w górę.

pokoje %>%
  filter(between(cena, 3000, 4000)) %>%
  .$opis
[1] "DWUPOZIOMOWE MIESZKANIE ODDALONE 3 KM OD CENTRUM KRAKOWA. W POBLIŻU ZNAJDUJĄ SIĘ MIN. PARK AWF, TAURON ARENA KRAKÓW, M1, PLAZA, POLITECHNIKA KRAKOWSKA.DOBRY DOJAZD ZARÓWNO DO CENTRUM KRAKOWA JAK I NOWEJ HUTY."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
[2] "Wynajme 2 pokojowe mieszanie na krotki okres (1-3miesiace)Mieszkanie (38m2) znajduje w centrum (Metro Rondo ONZ/Ul.Krochmalna 2). Mieszkanie jest kompletnie wyposażone (pralka, sprzęt kuchenny, lodowka, etc.) \r\nLokalizacja : W centrum, w pobliżu przystanku autobusowy/tramwajowa i metra.\r\nWynajem za: 3000zl\r\ntel:7 95 689 328\r\nZapraszam\r\nShort term flat for rent in CITY CENTER (for 1-3months)2 Rooms flat has 38sq.m offered to the renter, the whole apartment is fully well firshished clean and nice Convenienient location on the 8th floor with elevator. Flat is in city center 7 minutes to Metro Rondo ONZ and to tram bus stops. Perfect location close to everywhere and safe area. Under the flat is supermarkets, pharmacies, restaurants and bars. PRICE: 3000zlNr tel:7 95 689 328"
[3] "Wynajme 2 pokojowe mieszanie na krotki okres (1-3miesiace)Mieszkanie (38m2) znajduje w centrum (Metro Rondo ONZ/Ul.Krochmalna 2). Mieszkanie jest kompletnie wyposażone (pralka, sprzęt kuchenny, lodowka, etc.) \r\nLokalizacja : W centrum, w pobliżu przystanku autobusowy/tramwajowa i metra.\r\nWynajem za: 3000zl\r\ntel:7 95 689 328\r\nZapraszam\r\nShort term flat for rent in CITY CENTER2 Rooms flat has 38sq.m offered to the renter, the whole apartment is fully well firshished clean and nice Convenienient location on the 8th floor with elevator. Flat is in city center 7 minutes to Metro Rondo ONZ/Ul.Krochmalna 2 and to tram bus stops. Perfect location close to everywhere and safe area. Under the flat is supermarkets, pharmacies, restaurants and bars. PRICE: 3000zlNr tel:7 95 689 328"
[4] "Wynajmę dom nieumeblowany przy ul.Kasztanowej na Woli Justowskiej dla grupy studentów lub firmie dla pracowników do czerwca 2017 roku.Blisko do przystanku komunikacji autobusowej - 100 metrów, sklep 150 metrów.Kuchnia jest umeblowana, łazienki też umeblowane-pralka automatyczna też jest.Dom posiada wszystkie media - nadaje się do zamieszkania, czysty, ciepły.Miesięcznie 3500 zł. Kaucja 1 miesięczna. Media płaci najemca.Dom może zamieszkiwać kilkanaście osób dzieląc koszty najmu. Tel.663931805 lub przez formularz gumtree . Po podaniu nr telefonu - oddzwonię.Jestem właścicielem, nie ma prowizji.Dom jest w tej chwili niezamieszkały."                                                                                                                                                         
[5] "Wynajmę pokoje dla osób starszych z opieką medyczną . Cena do uzgodnienia. KONTAKT - LIGKAC@WP.PL"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

Powyższe przypadki opisują całe mieszkania (lub domy) do wynajęcia. Cena podana jest za mieszkanie/dom (sumę pokojów). W serwisie gumtree.pl istnieje osobny dział do wystawiania takich ofert o nazwie mieszkania i domy do wynajęcia. Sprawdźmy co dzieje się przy cenach między 2000 a 3000.

pokoje %>%
  filter(between(cena, 2000, 3000)) %>%
  .$opis
 [1] "Mam do wynajecia 2 przechodni pokoje do wynajecia w tym samym mieszkaniu w centrum (Metro Ratusz arsenal.Ul Anielewicza 4)  Pokój jest12m który znajduje się w mieszkaniu 3 pokojowym w bloku dzielnica centrum. Mieszkanie jest kompletnie wyposażone (pralka, sprzęt kuchenny, telewizja kablowa, etc.) \r\nLokalizacja : W centrum, w pobliżu przystanku autobusowy/tramwajowa i metra.\r\nWynajem za 1 pokoj:1000zl Caly pokoj 2000zl dla 2-3 osob\r\ntel:7 95 689 328\r\nZapraszam\r\nNICE Room for rent CITY CENTRE/UL.Anielewicza 4. Each of them 12sq.m offered to the renter, the whole apartment (55 sq m, 3rooms). Convenienient location on the 2nd floor.Flat is in city center 7 minutes to Metro Ratusz arsenal tram and bus stops. Perfect location close to everywhere and safe area. Under the flat is supermarkets, pharmacies, restaurants and bars. Whole Flat is fully furnished and without owner.PRICE For one room:1000zlWhole big room cost 2000zl for 2-3people.\r\n\r\nNr tel: 7 95 689 328"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
 [2] "Mam do wynajecia duzy pokoj do wynajecia w centrum (Metro Ratusz Arsenal/Ul.Anielewicza 4) Pokój jest 26m który znajduje się w mieszkaniu 2 pokojowym w bloku dzielnica centrum. Mieszkanie jest kompletnie wyposażone (pralka, sprzęt kuchenny, telewizja kablowa, etc.) \r\nLokalizacja : W centrum, w pobliżu przystanku autobusowy/tramwajowa i metra.Caly pokoj 2000zl dla 2-3 osob\r\ntel:7 95 689 328\r\nZapraszam\r\nNICE BIG Room for rent CITY CENTRE/UL.Anielewicza 4. Room is 26sq.m offered to the renter, the whole apartment (55 sq m, 2rooms). Convenienient location on the 2nd floor.Flat is in city center 7 minutes to Metro Ratusz arsenal tram and bus stops. Perfect location close to everywhere and safe area. Under the flat is supermarkets, pharmacies, restaurants and bars. Whole Flat is fully furnished and without owner.Whole big room cost 2000zl for 2-3people.\r\nNr tel: 7 95 689 328"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
 [3] "Mieszkanie na Żoliborzu, ul. Dymińska obok Cytadeli.2 pokoje, 1 piętro, blok z cegły.Mieszkanie czyste, ciche, słoneczne, umeblowane, kuchnia widna, osobna, Łazienka z kabiną prysznicową.BARDZO DOBRA LOKALIZACJA! Zielono, dużo miejsc spacerowych.Wymagana jednomiesięczna kaucja.Koszt najmu wynosi 2000 zł."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
 [4] "Duzy Pokoj dla 1-2osob Od zarazPiekny pokoj do wynajecia W centrum (Metro Ratusz Arsenal/ul.Adersa24) Wynajme pokój 26m2 który znajduje się w 2 pokojowym mieszkaniu. Mieszkanie jest dobrym standardzie kompletnie wyposażone (pralka, zmywarka, sprzęt kuchenny, telewizja kablowa, etc.) Nie toleruje zwierząt w mieszkaniu oraz palenia papierosów .\r\nLokalizacja : W centrum, w pobliżu przystanku autobusowy/tramwajowa i metra.\r\nWynajem za:2000zl \r\ntel:7 95 689 328\r\nZapraszam\r\nNICE Big Room for 1-2 person CITY CENTRE\r\nBeautiful, clean apartment. Room is 26sq.m offered to the renter, the whole apartment (56 sq m, 2rooms). Convenienient location on the 2nd floor with elevator.Flat is in city center 7 minutes to Metro(METRO RATUSZ ARSENAL/UL.ANDERSA24), tram and bus stops. Perfect location close to everywhere and safe area. Under the flat is supermarkets, pharmacies, restaurants and bars. Whole Flat is fully furnished and without owner.PRICE:2000zlAvaialble from now!"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
 [5] "Duzy Pokoj dla 1-2osob Od zarazPiekny pokoj do wynajecia W centrum (Metro Ratusz Arsenal/ul.Adersa24) Wynajme pokój 26m2 który znajduje się w 2 pokojowym mieszkaniu. Mieszkanie jest dobrym standardzie kompletnie wyposażone (pralka, zmywarka, sprzęt kuchenny, telewizja kablowa, etc.) Nie toleruje zwierząt w mieszkaniu oraz palenia papierosów .\r\nLokalizacja : W centrum, w pobliżu przystanku autobusowy/tramwajowa i metra.\r\nWynajem za:2000zl \r\ntel:7 95 689 328\r\nZapraszam\r\nNICE Big Room for 1-2 person CITY CENTRE\r\nBeautiful, clean apartment. Room is 26sq.m offered to the renter, the whole apartment (56 sq m, 2rooms). Convenienient location on the 2nd floor with elevator.Flat is in city center 7 minutes to Metro(METRO RATUSZ ARSENAL/UL.ANDERSA24), tram and bus stops. Perfect location close to everywhere and safe area. Under the flat is supermarkets, pharmacies, restaurants and bars. Whole Flat is fully furnished and without owner.PRICE:2000zlAvaialble from now!\r\n\r\nNr tel: 7 95 689 328"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
 [6] "Dwa nieprzechodnie pokoje z dwoma podwójnymi łóżkami i widokiem na skwer. Oddzielna kuchnia i oddzielna łazienka. Mieszkanie usytułowane na Kazimierzu 10 minut od i Wisły.W pobliżu puby, restauracje i sklep całodobowy.Przystanek tramwajowy i autobusowy za rogiem.Mieszkanie jest w pełni wyposażone w lodówkę, pralkę, dwa podwójne łóżka itp.Nowe okna, ogrzewanie elektryczne.Cena 2000 zł + media(250)UMOWA NA 12 MIESIĘCYTwo separate bedroom apartment on Brzozowa street with view on square. Separate kitchen and bathroom. Located in Kazimierz District, 15 minutes walk to Man Square, Wisla Boulevard.In the area there are pubs, restaurants, 24h shops and nice cosy park. Tram and bus stop just around the corner.The apartment is fully equipped with fridge, washing machine, two double beds, etc.New windows, electric heating.Price 2000 pln + media(250)CONTRACT ON THE BASIS OF 12 MONTHS ONLY"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
 [7] "Piekny Duzy Pokoj dla 1-2osob Od zarazPiekny pokoj do wynajecia W centrum (Metro Ratusz Arsenal/ul.Adersa24) Wynajme pokój 26m2 który znajduje się w 2 pokojowym mieszkaniu. Mieszkanie jest dobrym standardzie kompletnie wyposażone (pralka, zmywarka, sprzęt kuchenny, telewizja kablowa, etc.) Nie toleruje zwierząt w mieszkaniu oraz palenia papierosów .\r\nLokalizacja : W centrum, w pobliżu przystanku autobusowy/tramwajowa i metra.\r\nWynajem za:2000zl \r\ntel:7 95 689 328\r\nZapraszam\r\nNICE Big Room for 1-2 person CITY CENTRE\r\nBeautiful, clean apartment. Room is 26sq.m offered to the renter, the whole apartment (56 sq m, 2rooms). Convenienient location on the 2nd floor with elevator.Flat is in city center 7 minutes to Metro(METRO RATUSZ ARSENAL/UL.ANDERSA24), tram and bus stops. Perfect location close to everywhere and safe area. Under the flat is supermarkets, pharmacies, restaurants and bars. Whole Flat is fully furnished and without owner.PRICE:2000zlAvaialble from now!\r\n\r\nNr tel: 7 95 689 328"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
 [8] "Do wynajęcia duży, komfortowy pokój dla 2-3 osób w 3-pokojowym mieszkaniu w kamienicy ( I piętro ). Okolice mostu Dębnickiego.Wspólna łazienka, kuchnia ( z balkonem ) i przedpokój ( w pozostałych pokojach mieszkają 3 osoby).Pokój po remoncie. Nowe wyposażenie (meble): łóżka, biurka, fotele (na zdjęciach przed aranżacją )Cena wynajmu 2100 zł/mc + ok. 100 zł/mc media.Kaucja 2100 złOferta Biura Nieruchomościkontakt: 570 232 350 więcej ofert na naszej stronie:www.absolutnieruchomosci.plWszystkie szczegóły oferty podano na podstawie deklaracji lub dokumentacji przedstawionej przez właściciela. Oferta nie stanowi oferty handlowej w rozumieniu kodeksu cywilnego i nie jest wiążąca.Biuro pobiera prowizję w wysokości 1-miesięcznego czynszu.P-012"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
 [9] "Mam do wynajecia duzy pokoj 26sq.m do wynajecia w centrum (Metro Ratusz Arsenal/Ul.Anielewicza 4) Pokój jest 26m który znajduje się w mieszkaniu 2 pokojowym w bloku dzielnica centrum. Mieszkanie jest kompletnie wyposażone (pralka, sprzęt kuchenny, telewizja kablowa, etc.) \r\nLokalizacja : W centrum, w pobliżu przystanku autobusowy/tramwajowa i metra.Cena pokoj 2000zl dla 2-3 osob\r\ntel:7 95 689 328\r\nZapraszam\r\nNICE BIG Room for rent CITY CENTRE/UL.Anielewicza 4. Room is 26sq.m offered to the renter, the whole apartment (55 sq m, 2rooms). Convenienient location on the 2nd floor.Flat is in city center 7 minutes to Metro Ratusz arsenal tram and bus stops. Perfect location close to everywhere and safe area. Under the flat is supermarkets, pharmacies, restaurants and bars. Whole Flat is fully furnished and without owner.Whole big room cost 2000zl for 2-3people.\r\nNr tel: 7 95 689 328"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
[10] "Do wynajęcia dwa mieszkania/kawalerki, znajdujące się obok siebie, na krótko lub dłużej, przytulne i funkcjonalne. W\r\nsamym centrum starego miasta (ul. Zyblikiewicza), w trzypiętrowej zadbanej\r\nkamienicy.Każde posada przestronny pokój dzienny\r\npołączony z sypialnią, aneks kuchenny i łazienkę. Świetne dla osób\r\nwynajmujących solo lub par. W pełni umeblowane, ciepłe, zadbane. Dodatkowym atutem\r\nkażdego jest posiadanie antresoli nadającej się na umiejscowienie na niej\r\nkącika do spania, czytania, odpoczywania, rozmyślania lub przechowywania rzeczy\r\ntypu: są niezbędne, ale tylko od czasu do czasu.\r\n\r\n\r\n\r\nPonadto cicha okolica, pełna gama programów\r\ntelewizyjnych w nowoczesnym telewizorze i wyposażenie aneksu kuchennego zachęca\r\ndo zamieszkania już od listopada."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
[11] "Wynajme duzy pokoj na krotki okres (1-3miesiace)Duzy samodzielny pokoj do wynajecia W centrum (Metro Ratusz arsenal/Ul.anielewicza 4) pokój jest 24m który znajduje się w mieszkaniu 2 pokojowym w bloku dzielnica centrum. Mieszkanie jest kompletnie wyposażone (pralka, sprzęt kuchenny, telewizja kablowa, etc.) \r\nLokalizacja : W centrum, w pobliżu przystanku autobusowy/tramwajowa i metra.\r\nWynajem za: 2000zl \r\ntel:7 95 689 328\r\nZapraszam\r\nBig room rent for 1-3 months in CITY CENTER (Ul.anielewicza 4)Room has 24 sq.m offered to the renter, the whole apartment is fully well firshished clean and nice. (55 sq m, 2rooms). Convenient location on the 2nd floor. Flat is in city center 7 minutes to Metro Ratusz Arsenal, tram and bus stops. Perfect location close to everywhere and safe area. Under the flat is supermarkets, pharmacies, restaurants and bars. PRICE: 2000zl\r\nNr tel: 7 95 689 328"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
[12] "Wynajme 2 pokojowe mieszanie na krotki okres (1-3miesiace)Mieszkanie (38m2) znajduje w centrum (Metro Rondo ONZ/Ul.Krochmalna 2). Mieszkanie jest kompletnie wyposażone (pralka, sprzęt kuchenny, lodowka, etc.) \r\nLokalizacja : W centrum, w pobliżu przystanku autobusowy/tramwajowa i metra.\r\nWynajem za: 3000zl\r\ntel:7 95 689 328\r\nZapraszam\r\nShort term flat for rent in CITY CENTER (for 1-3months)2 Rooms flat has 38sq.m offered to the renter, the whole apartment is fully well firshished clean and nice Convenienient location on the 8th floor with elevator. Flat is in city center 7 minutes to Metro Rondo ONZ and to tram bus stops. Perfect location close to everywhere and safe area. Under the flat is supermarkets, pharmacies, restaurants and bars. PRICE: 3000zlNr tel:7 95 689 328"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
[13] "Do wynajęcia od zaraz nowe mieszkanie urządzone w wysokim standardzie na strzeżonym zamkniętym osiedlu fi w krakowie przy ul. Szafrana 5Mieszkanie zlokalizowane jest na 2 piętrze - okna od strony zachodniej - dobrze doświetlone, jasne, przestronnePodłoga - deska lita olejowanaKuchnia - otwarta w pełni wyposażona - zmywarka, lodówka, zamrażalka, piekarnik, mikrofala, płyta indykcyjna, okap, zlew, pralka - wszystkie urządzenia nowe i o wysokim standardziePokój 1 - szafa wnękowa, wykonana na zamówienie, łóżko 2 - osobowePokój 2 - regały, sofa rozkładana 2 osobowaŁazienka - prysznic, umywalka nablatowa, duża szafka, toaletaOgrzewanie miejskie, w budynku nie ma gazuDo wynajęcia od zarazBezproblemowi właścicieleKoszt najmu 2000 zł + czynsz 315 zł + prąd (ok. 60 zł) nie ma dodatkowych opłatWymagana kaucja zwrotna w wysokości koszt najmuTel. 512 64 95 54 lub 501 503 064Proszę o kontakt tylko osoby prywatne bez pośrednictwa biur nieruchomości"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
[14] "PolskiWyjątkowy apartament dostępny na długi lub krótki okres od zaraz.2 pokoje niezależne: 18m2 i 12 m2. Mniejszy pokój z balkonem. Z większego pokoju piękny widok na zieleń. Czynsz: 1900 zł + rachunki (internet jest w cenie) lub 2600 zł all inclusiveBudynek położony jest 5 min pieszo do Galerii Kazimierz i do Wisły, 10 min pieszo zajmuje dojście na Rynek i Kazimierz.Mała Kaucja: takEnglishNice flat situated 3 min to the river, 10 min walk to the old town and the Jewish district available for both short periods. The flat has 2 independend rooms (12, 18 m2), bathroom and kitchen.The apartament has one of the greatest locatisation in town!Price per month: 1900 zloty + bills (wifi internet available), or 2600 zloty all inclusiveDeposit: yesYou can also contact me via whatsapp."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
[15] "Mam do wynajecia duzy pokoj 26sq.m do wynajecia w centrum (Metro Ratusz Arsenal/Ul.Anielewicza 4) Pokój jest 26m który znajduje się w mieszkaniu 2 pokojowym w bloku dzielnica centrum. Mieszkanie jest kompletnie wyposażone (pralka, sprzęt kuchenny, telewizja kablowa, etc.) \r\nLokalizacja : W centrum, w pobliżu przystanku autobusowy/tramwajowa i metra.Cena pokoj 2000zl dla 2-3 osob\r\ntel:7 95 689 328\r\nZapraszam\r\nNICE BIG Room for rent CITY CENTRE/UL.Anielewicza 4. Room is 26sq.m offered to the renter, the whole apartment (55 sq m, 2rooms). Convenienient location on the 2nd floor.Flat is in city center 7 minutes to Metro Ratusz arsenal tram and bus stops. Perfect location close to everywhere and safe area. Under the flat is supermarkets, pharmacies, restaurants and bars. Whole Flat is fully furnished and without owner.Whole big room cost 2000zl for 2-3people.\r\nNr tel: 7 95 689 328"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
[16] "Kawalerka na Mordorze ponownie do wynajęcia\r\n\r\nWynajmę bezpośrednio umeblowaną kawalerkę o \r\npowierzchni 28 m2 na Górnym Mokotowie, w pobliżu Galerii Mokotów, na \r\nparterze. Mieszkanie nowe, po całkowitym remoncie, atrakcyjne, jasne, z \r\nkuchnią otwartą i wyposażone (w tym pralka).\r\n\r\nBudynek zrewitalizowany, klatka schodowa w standardzie apartamentowca, z ochroną i wideodomofonem.\r\n \r\n2 przystanki od Galerii Mokotów w zacisznej i zielonej okolicy; w \r\npobliżu budynku - 150 m - przystanek autobusowy, przychodnia lekarska, gabinet weterynaryjny, bazarek z naturalnymi produktami, Top Market, apteki, banki, kompleks handlowo-rozrywkowy Galeria Mokotów (sklepy \r\nm.in. Carrefour, punkty usługowe, kina, kręgielnia itp.), Uniwersytet \r\nWarszawski Wydział Zarządzania.\r\n \r\nOkolica z terenami rekreacyjnymi, bardzo dobrze skomunikowana z pozostałymi dzielnicami, autobusy, tramwaje, metro (10 minut).\r\n\r\nCzynsz 2.500 zł/mc plus opłaty około 300zł. Wysokość dodatkowych opłat zależy od wybranej opcji pakietu TV/Internet. Kaucja 2.500zł.\r\n\r\nPośrednikom i osobom niezdecydowanym dziękujemy."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
[17] "Od 1 listopada możliwość wynajęcia dwoch pokoi w mieszkaniu na ul. Marchołta 53A. Mieszkanie w nowym budownictwie 3 pokojowe, 55m^2, na 2 piętrze, jest winda, podwyższony standard, ogrzewanie gazowe. W jednym pokoju mieszka sympatyczna studentka. Cicha i spokojna okolica, mieszkanie oddalone od drogi głównej. Do najbliższego przystanku jest 3 minuty. Przystanek: Marchołta.Mieszkanie jest w części umeblowane  (tzn. kuchnia, łazienka i szafa na przedpokoju).  Jeden pokój posiada osobny duży balkon z bardzo fajnym widokiem. Możliwość wynajęcia garażu podziemnego. \r\nMieszkanie jest dopiero przygotowywane do zamieszkania więc o zdjęcia proszę kontaktować się przez Facebooka (https://m.facebook.com/kamila.baniok?ref=bookmarks). Jeden pokój z balkonem jest przeznaczony dla dwóch osób, a drugi dla jednej osoby. Cena za calosc 2000 zł+media, wiec za osobę 500 zł + media."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
[18] "Do wynajęcia piękne, nowoczesne, nigdy nie zamieszkałe 2 pokojowe mieszkanie.Wszystko po remoncie !Nowoczesna w pełni wyposażona kuchnia w armaturę BOSH. Nowoczesna łazienka, sypialnia z łóżkiem i szafkami , oraz dużą szafą.W przedpokoju szafa na obuwie i okrycia wierzchnie.Idealna Lokalizacja ! - mieszkanie jest w monitorowanej , po remontach kamienicy z windą.100 metrów do stacji metra Racławicka ! 10 min do Centrum !W pobliżu pełna infrastruktura.Do mieszkania przynależy komórka. Możliwość parkowania auta na podwórku - dla mieszkańców - bezpłatnie ! Idealny apartamencik - Super lokalizacja ! Gorąco polecam.Kaucja- 2 miesiące czynszu, wszystko wliczone, najemca płaci opłaty licznikowe.Zainteresowanych proszę o kontakt mailowy - Dariusz"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
[19] "Wynajme 2 pokojowe mieszanie na krotki okres (1-3miesiace)Mieszkanie (38m2) znajduje w centrum (Metro Rondo ONZ/Ul.Krochmalna 2). Mieszkanie jest kompletnie wyposażone (pralka, sprzęt kuchenny, lodowka, etc.) \r\nLokalizacja : W centrum, w pobliżu przystanku autobusowy/tramwajowa i metra.\r\nWynajem za: 3000zl\r\ntel:7 95 689 328\r\nZapraszam\r\nShort term flat for rent in CITY CENTER2 Rooms flat has 38sq.m offered to the renter, the whole apartment is fully well firshished clean and nice Convenienient location on the 8th floor with elevator. Flat is in city center 7 minutes to Metro Rondo ONZ/Ul.Krochmalna 2 and to tram bus stops. Perfect location close to everywhere and safe area. Under the flat is supermarkets, pharmacies, restaurants and bars. PRICE: 3000zlNr tel:7 95 689 328"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
[20] "Wynajme duzy pokoj na krotki okres (1-3miesiace)Duzy samodzielny pokoj do wynajecia W centrum (Metro Ratusz arsenal/Ul.anielewicza 4) pokój jest 24m który znajduje się w mieszkaniu 2 pokojowym w bloku dzielnica centrum. Mieszkanie jest kompletnie wyposażone (pralka, sprzęt kuchenny, telewizja kablowa, etc.) \r\nLokalizacja : W centrum, w pobliżu przystanku autobusowy/tramwajowa i metra.\r\nWynajem za: 2000zl \r\ntel:7 95 689 328\r\nZapraszam\r\nBig room rent for 1-3 months in CITY CENTER (Ul.anielewicza 4)Room has 24 sq.m offered to the renter, the whole apartment is fully well firshished clean and nice. (55 sq m, 2rooms). Convenient location on the 2nd floor. Flat is in city center 7 minutes to Metro Ratusz Arsenal, tram and bus stops. Perfect location close to everywhere and safe area. Under the flat is supermarkets, pharmacies, restaurants and bars. PRICE: 2000zl\r\nNr tel: 7 95 689 328"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
[21] "Oferuję bez pośrednika do wynajęcia ciche mieszkanie obok\r\nstacji metra Wilanowska przy ulicy Puławskiej 233. Mieszkanie dopiero co\r\nurządzone w pełni wyposażone w sprzęt AGD, piekarnik, lodówka, pralka (6kg\r\nwsadu), . Dwie szafy: w przedpokoju i sypialni (lustrzane drzwi) oraz pojemna\r\nkomoda. Na podłodze wysokiej jakości i twardości panele bambusowe. Całe\r\nmieszkanie pomalowane farbą o dwóch odcieniach ciepłej jasnej żółci. W łazience\r\nkabina prysznicowa. Aneks kuchenny otwarty na pokój. Ciche, przytulne, nowocześnie urządzone mieszkanie z balkonem na 3 piętrze nowoczesnego budynku z\r\nwindami i ochroną. Mieszkanie mimo atrakcyjnej lokalizacji blisko stacji metra\r\n(piechotą 1, 5 min.) oraz wybudowania przy ulicy Puławskiej jest ciche gdyż okna\r\nwychodzą na drugą stronę na willową zabudowę, dodatkowo jest osłonięte przez\r\nsam budynek z 3 stron. Na parterze budynku od strony ulicy Puławskiej 2 banki\r\n(bankomaty) apteka, punkty gastronomiczne, obok sklepy samoobsługowe i\r\nsupermarket. Oferty od osób prywatnych lub firm na nr. tel. 509295881"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
[22] "Do wynajecia 2 pokojowe 54 m2  mieszkanie na ul. Pełczyńskiego 32Mieszkanie jest po odświeżeniu wolne od już .W cenie garaż pod budynkiem. Mieszkanie  całkowicie umeblowane .Kuchnia ze zmywarką.w sypialni  łóżko 160 x 200, szafa . W salonie narożnik  , stół krzesła komoda , szafy wnękowe, telewizor.Na tarasie meble .WSZYSTKIE MEDIA W CENIE 2200 ZŁKontakt Anna 505-141-955,"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
[23] "Wynajmę dwupokojowe mieszkanie (53 m2) z loggią (10 m2). Do\r\ndyspozycji miejsce parkingowe w garażu podziemnym. Mieszkanie znajduje się na\r\npierwszym piętrze sześciopiętrowego bloku (rok 2006). Osiedle zamknięte, usytuowane tuż obok Fortów Bema. W okolicy Galeria Handlowa Bemowo i kino\r\nCinema City Bemowo. \r\nMieszkanie składa się z przestronnego pokoju z aneksem kuchennym, sypialni, łazienki z kabiną prysznicową i WC, garderoby oraz loggi z ładnym widokiem. W\r\nsalonie regał, telewizor, rozkładana kanapa, jasny kącik jadalniany ze stołem i\r\nkrzesłami, bar oddzielający aneks kuchenny. Kuchnia w pełni wyposażona:\r\nlodówka, kuchnia elektryczna, mikrofalówka, naczynia, garnki i patelnie.\r\nŁazienka z kabiną prysznicową i pralką. W sypialni znajduje się podwójne łóżko, biurko i komoda. Przedpokój i garderoba wyposażone w pojemne szafy wnękowe.\r\nMożliwość podłączenia internetu i sieci satelitarnej.\r\nW pobliżu zjazd na Trasę Toruńską. Dogodny dojazd do Metra Stare Bielany. Tuż\r\nobok dwa przystanki autobusowe (Hala Sportowa Bemowo - linie 197 i 397) i\r\nstacja rowerów Veturillo. Nieopodal pętla tramwajowa (linie 20, 23, 24)..W\r\nodległości  850 m przystanek Wrocławska -\r\nlinie 112, 167, 171, 184, E-2.\r\nW okolicy dwa sklepy spożywcze, restauracje , Targ Śniadaniowy. Na terenie\r\nFortów Bema bogato wyposażony plac zabaw, boiska, park linowy, Cafe Jutra, ścieżka rowerowa i dużo miejsca na spacery. Nieopodal Hala Sportowa Bemowo. Na\r\nosiedlu piekarnia, basen, dentysta, pralnia"                                                                                                                                                                                                                                                                                                                                 
[24] "BEZPOŚREDNIO OD WŁAŚCICIELA/ENGLISH BELOWMożliwość wynajęcia pokoju dwu lub trzyosobowego. Cena do negocjacji.Mieszkanie składa się z dwóch dużych pokoi (ok. 15 i 20m) dużej kuchni i łazienki, w pełni umeblowane. W pobliżu Galeria Kazimierz, Restauracje, sklepy. 10 minut na nogach na Kazimierz i 15 na rynek.Bardzo dobry punkt komunikacyjny: tramwaje: 50, 20, 19, 14, 12, 22 oraz autobusy. Blisko UEK i UJ.Na cenę składa się odstępne 2100 zł, 350zł czynszu, ok. 90-100 zł za prąd (płacone wg. zużycia) i ok 100-150 zł za gaz (również wg. zużycia).Więcej informacji pod nr telefonu: 793455301 lub mailowo na mateusz.pierzchala1@gmail.comFor rent: two bedroom apartment, with big kitchen, over 70sq meters in very good localization near Rondo Grzegórzeckie and Kazimierz district. Price: 2000 for owner + ~500zł media (depends on consumption of electrical energy and gas).For more information send an email on mateusz.pierzchala1@gmail.com"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
[25] "Piękny apartament z dwoma oddzielnymi pokojami, bardzo ciepłe, z remontem, niezależne ogrzewanie, duża kuchnia , wszystke meble i technika. Łączna powierzchnia 70m2. Przy domu znajduje się piękny park.W pobliżu znajduje się szkoła i przedszkola, jest miejsce dla samochodu."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
[26] "Do wynajęcia duży, komfortowy pokój dla 2-3 osób w 3-pokojowym mieszkaniu w kamienicy ( I piętro ). Okolice mostu Dębnickiego.Wspólna łazienka, kuchnia ( z balkonem ) i przedpokój ( w pozostałych pokojach mieszkają 3 osoby).Pokój po remoncie. Nowe wyposażenie (meble): łóżka, biurka, fotele (na zdjęciach przed aranżacją )Cena wynajmu 2100 zł/mc + ok. 100 zł/mc media.Kaucja 2100 złOferta Biura Nieruchomościkontakt: 570 - pokaż numer telefonu - więcej ofert na naszej stronie:www.absolutnieruchomosci.plWszystkie szczegóły oferty podano na podstawie deklaracji lub dokumentacji przedstawionej przez właściciela. Oferta nie stanowi oferty handlowej w rozumieniu kodeksu cywilnego i nie jest wiążąca.Biuro pobiera prowizję w wysokości 1-miesięcznego czynszu.P-012"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
[27] "Biuro Nieruchomości Zamieszkam.pl oferuje na wynajem jednopokojowe mieszkanie w Krakowie przy ul. Krakusa.Mieszkanie składa się z pokoju otwartego na kuchnie z jadalnią, sypialni oraz łazienki z toaletą. Lokal jest całkowicie wyposażony (kuchenka elektryczna, piekarnik, lodówka, pralka, prysznic) oraz w pełni umeblowany.BARDZO ATRAKCYJNA LOKALIZACJA!!!Mieszkanie zlokalizowane jest na Starym Mieście, blisko na Wawel, Kazimierz, do Rynku Głównego. Łatwy dojazd do każdej części Krakowa. W okolicy mnóstwo sklepów, szkół, żłobków, placówek medycznych, a także Centrum Kongresowe ICE.Cena za wynajem 2100 złotych + czynsz do administracji ok. 400 złotych + prąd według zużycia. W mieszkaniu nie ma gazu (tylko energia elektryczna). Kaucja wynosi 3000 zł.Zapraszam już dziś na prezentację!Kontakt w sprawie oferty: Joanna Siuta 530 531 521.Zobacz więcej ofert w biurze nieruchomości Zamieszkam.plOgłoszenie nie stanowi oferty w rozumieniu KC."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
[28] "Do wynajęcia duży, komfortowy pokój dla 2-3 osób w 3-pokojowym mieszkaniu w kamienicy ( I piętro ). Okolice mostu Dębnickiego.Wspólna łazienka, kuchnia ( z balkonem ) i przedpokój ( w pozostałych pokojach mieszkają 3 osoby).Pokój po remoncie. Nowe wyposażenie (meble): łóżka, biurka, fotele (na zdjęciach przed aranżacją )Cena wynajmu 2100 zł/mc + ok. 100 zł/mc media.Kaucja 2100 złOferta Biura Nieruchomościkontakt: 570 - pokaż numer telefonu - więcej ofert na naszej stronie:www.absolutnieruchomosci.plWszystkie szczegóły oferty podano na podstawie deklaracji lub dokumentacji przedstawionej przez właściciela. Oferta nie stanowi oferty handlowej w rozumieniu kodeksu cywilnego i nie jest wiążąca.Biuro pobiera prowizję w wysokości 1-miesięcznego czynszu.P-012"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
[29] "Do wynajęcia duży, komfortowy pokój dla 2-3 osób w 3-pokojowym mieszkaniu w kamienicy ( I piętro ). Okolice mostu Dębnickiego.Wspólna łazienka, kuchnia ( z balkonem ) i przedpokój ( w pozostałych pokojach mieszkają 3 osoby).Pokój po remoncie. Nowe wyposażenie (meble): łóżka, biurka, fotele (na zdjęciach przed aranżacją )Cena wynajmu 2100 zł/mc + ok. 100 zł/mc media.Kaucja 2100 złOferta Biura Nieruchomościkontakt: 570 - pokaż numer telefonu - więcej ofert na naszej stronie:www.absolutnieruchomosci.plWszystkie szczegóły oferty podano na podstawie deklaracji lub dokumentacji przedstawionej przez właściciela. Oferta nie stanowi oferty handlowej w rozumieniu kodeksu cywilnego i nie jest wiążąca.Biuro pobiera prowizję w wysokości 1-miesięcznego czynszu.P-012"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
[30] "Do wynajęcia duży, komfortowy pokój dla 2-3 osób w 3-pokojowym mieszkaniu w kamienicy ( I piętro ). Okolice mostu Dębnickiego.Wspólna łazienka, kuchnia ( z balkonem ) i przedpokój ( w pozostałych pokojach mieszkają 3 osoby).Pokój po remoncie. Nowe wyposażenie (meble): łóżka, biurka, fotele (na zdjęciach przed aranżacją )Cena wynajmu 2100 zł/mc + ok. 100 zł/mc media.Kaucja 2100 złOferta Biura Nieruchomościkontakt: 601 488 083, 570 232 350więcej ofert na naszej stronie:www.absolutnieruchomosci.plWszystkie szczegóły oferty podano na podstawie deklaracji lub dokumentacji przedstawionej przez właściciela. Oferta nie stanowi oferty handlowej w rozumieniu kodeksu cywilnego i nie jest wiążąca.Biuro pobiera prowizję w wysokości 1-miesięcznego czynszu.P-012"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
[31] "Do wynajęcia duży, komfortowy pokój dla 2-3 osób w 3-pokojowym mieszkaniu w kamienicy ( I piętro ). Okolice mostu Dębnickiego.Wspólna łazienka, kuchnia ( z balkonem ) i przedpokój ( w pozostałych pokojach mieszkają 3 osoby).Pokój po remoncie. Nowe wyposażenie (meble): łóżka, biurka, fotele (na zdjęciach przed aranżacją )Cena wynajmu 2100 zł/mc + ok. 100 zł/mc media.Kaucja 2100 złOferta Biura Nieruchomościkontakt: 601 488 083, 570 232 350więcej ofert na naszej stronie:www.absolutnieruchomosci.plWszystkie szczegóły oferty podano na podstawie deklaracji lub dokumentacji przedstawionej przez właściciela. Oferta nie stanowi oferty handlowej w rozumieniu kodeksu cywilnego i nie jest wiążąca.Biuro pobiera prowizję w wysokości 1-miesięcznego czynszu.P-012"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
[32] "Do wynajęcia duży, komfortowy pokój dla 2-3 osób w 3-pokojowym mieszkaniu w kamienicy ( I piętro ). Okolice mostu Dębnickiego.Wspólna łazienka, kuchnia ( z balkonem ) i przedpokój ( w pozostałych pokojach mieszkają 3 osoby).Pokój po remoncie. Nowe wyposażenie (meble): łóżka, biurka, fotele (na zdjęciach przed aranżacją )Cena wynajmu 2100 zł/mc + ok. 100 zł/mc media.Kaucja 2100 złOferta Biura Nieruchomościkontakt: 601 488 083, 570 232 350więcej ofert na naszej stronie:www.absolutnieruchomosci.plWszystkie szczegóły oferty podano na podstawie deklaracji lub dokumentacji przedstawionej przez właściciela. Oferta nie stanowi oferty handlowej w rozumieniu kodeksu cywilnego i nie jest wiążąca.Biuro pobiera prowizję w wysokości 1-miesięcznego czynszu.P-012"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
[33] "Od 1 listopada możliwość wynajęcia pokoju dwuosobowego  w mieszkaniu na ul. Marchołta 53A. Mieszkanie w nowym budownictwie 3 pokojowe, 55m^2, na 2 piętrze, jest winda, podwyższony standard, ogrzewanie gazowe. W jednym jak i druhim pokoju mieszkaja sympatyczne studentki. Cicha i spokojna okolica, mieszkanie oddalone od drogi głównej. Do najbliższego przystanku jest 3 minuty. Przystanek: Marchołta.Mieszkanie jest w części umeblowane  (tzn. kuchnia, łazienka i szafa na przedpokoju). Pokój posiada osobny balkon z fajnym widokiem. Możliwość wynajęcia garażu podziemnego. \r\nMieszkanie jest dopiero przygotowywane do zamieszkania więc o zdjęcia proszę kontaktować się przez Facebooka (https://m.facebook.com/kamila.baniok?ref=bookmarks). Cena za calosc 2000 zł+media, wiec za osobę 500 zł + media."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
[34] "Do wynajęcia piękne, nowoczesne, nigdy nie zamieszkałe 2 pokojowe mieszkanie.Wszystko po remoncie !Nowoczesna w pełni wyposażona kuchnia w armaturę BOSH. Nowoczesna łazienka, sypialnia z łóżkiem i szafkami , oraz dużą szafą.W przedpokoju szafa na obuwie i okrycia wierzchnie.Idealna Lokalizacja ! - mieszkanie jest w monitorowanej , po remontach kamienicy z windą.100 metrów do stacji metra Racławicka ! 10 min do Centrum !W pobliżu pełna infrastruktura.Do mieszkania przynależy komórka. Możliwość parkowania auta na podwórku - dla mieszkańców - bezpłatnie ! Idealny apartamencik - Super lokalizacja ! Gorąco polecam.Kaucja- 2 miesiące czynszu, wszystko wliczone, najemca płaci opłaty licznikowe.Zainteresowanych proszę o kontakt mailowy - Dariusz"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
[35] "DWUPPOKOJOWE, SŁONECZNE MIESZKANIE NA SASKIEJ KĘPIE PRZY UL. NUBIJSKADoskonałe połączenie komunikacyjne z całym miastem ze względu na pobliską infrastrukturę. Dojazd do Centrum zajmuje 15 minut. Bardzo dobre połączenie z Metrem Politechnika oraz Uczelniami .Łatwy dostęp do atrakcji pobliskiej Saskiej Kępy, sławna ulica Francuska wypełniona po brzegi kawiarniami i restauracjami, Stadion Narodowy na których poza meczami , odbywają się koncerty oraz inne atrakcyjne eventy :-). W pobliżu „Park Skaryszewski” oraz kawiarenki „Przy Balatonie”, gdzie można udać się na spacer :-). Na osiedlu znajduje się również „Targ” , gdzie można zakupić świeże produkty spożywcze oraz Biedronka dla fanów tanich i szybkich zakupów :-) dostępna do 22:00 :-)Mieszkanie Położone na 3 piętrze w 4 piętrowym bloku . Bez sąsiadów za oknami, z otwartym widokiem na osiedlową zieleń. Idealnie ciche, nawet przy otwartych oknach :-) Wnętrze na zdjęciach nie zawiera wszystkich dostępnych mebli, między innymi w mniejszym pokoju znajduje się dwuosobowe sypialniane łóżko. Na życzenie wynajmujących możliwość doposażenia w biurko, ławę, czy stolik kawowy.Rozkład idealny dla 2- 3 osób– pokój dzienny z „pakowną” meblościanką :-) z wyjściem na przytulny balkonik. Sypialnia posiada szafę wnękową, doposażenie wg powyższych możliwości do uzgodnienia. Łazienka z wanną i dopasowaną ilością szafek. Przedpokój z szafą wnękową oraz bardzo dużym lustrem. Niezbędny sprzęt AGD pozostaje do dyspozycji wynajmujących: lodówka, pralka, piekarnik odkurzacz, żelazko, czajnik elektryczny :-). Całość robi wrażenie większego niż jest w rzeczywistości. Miejsce postojowe pod blokiem zawsze dostępne :-), ale istnieje również możliwość pozostawienia auta na strzeżonym parkingu tuż obok bloku. Media płatne dodatkowo wg liczników, możliwość pozostawienia do dyspozycji Internetu."
[36] "Do wynajęcia\r\n mieszkanie 47 m2 przy Al.\r\nJana Pawła II 61A\r\n\r\n \r\n\r\nMieszkanie\r\nskłada się z:\r\n\r\n·        \r\ndwóch niezależnych pokoi , ·        \r\nŁazienki wyposażonej w kabinę prysznicową , ·        \r\nwidnej, oddzielnej kuchni ( w kuchni znajduje\r\nsię nowa, lodówko-zamrażarka, kuchenka mikrofalowa, kuchnia gazowa i zabudowana\r\npralka).\r\n\r\nMieszkanie\r\nzlokalizowane jest na czwartym piętrze w dziesięciopiętrowym budynku. \r\n\r\nŚródmieście, ale cisza, spokój , dużo zieleni. W okolicy pełna infrastruktura- sklepy, szkoły\r\n, dogodna komunikacja w każdą stronę miasta (do Arkadii  5 min. na piechotę). Mieszkanie wyposażone w\r\nnowe meble i nowy sprzęt AGD ( odkurzacz, żelazko, deska do prasowania, mikrofala, wyposażona kuchnia).\r\n\r\nCzynsz 2500\r\nzł. + media ( woda, gaz, prąd -według wskazań liczników).\r\n\r\nKaucja -\r\njednomiesięczny czynsz.\r\n\r\nTelefon\r\nkontaktowy 883009999, 696570359."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
[37] "Wynajme duzy pokoj na krotki okres (1-3miesiace)Duzy samodzielny pokoj do wynajecia W centrum (Metro Ratusz arsenal/Ul.anielewicza 4) pokój jest 24m który znajduje się w mieszkaniu 2 pokojowym w bloku dzielnica centrum. Mieszkanie jest kompletnie wyposażone (pralka, sprzęt kuchenny, telewizja kablowa, etc.) \r\nLokalizacja : W centrum, w pobliżu przystanku autobusowy/tramwajowa i metra.\r\nWynajem za: 2000zl \r\ntel:7 95 689 328\r\nZapraszam\r\nBig room rent for 1-3 months in CITY CENTER (Ul.anielewicza 4)Room has 24 sq.m offered to the renter, the whole apartment is fully well firshished clean and nice. (55 sq m, 2rooms). Convenient location on the 2nd floor. Flat is in city center 7 minutes to Metro Ratusz Arsenal, tram and bus stops. Perfect location close to everywhere and safe area. Under the flat is supermarkets, pharmacies, restaurants and bars. PRICE: 2000zl\r\nNr tel: 7 95 689 328"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

Tym razem cena części ofert faktycznie dotyczy jednego pokoju do wynajęcia w dwópokojowym mieszkaniu w pobliżu stacji Metro Ratusz Arsenał. Niestety podany metraż dotyczy całego mieszkania.

Przyjrzyjmy się teraz skrajnym wielkościom.

pokoje %>%
  filter(wielkosc >= 1000) %>%
  .$opis
[1] "2 Piekni przechodni pokoje do wynajecia W centrum (Metro Ratusz arsenal/Ul.andersa 24) Kazdy pokój ma 14m który znajduje się w mieszkaniu 3 pokojowym w bloku dzielnica centrum. Mieszkanie jest kompletnie wyposażone (pralka, sprzęt kuchenny, telewizja kablowa, etc.) \r\nLokalizacja : W centrum, w pobliżu przystanku autobusowy/tramwajowa i metra.\r\nWynajem za 1 pokoj :1000zl \r\ntel:7 95 689 328\r\nZapraszam\r\nLovely Interconnecting 2 Rooms for rent in CITY CENTER. Each rooms has 14sq.m offered to the renter, the whole apartment (55 sq m, 3rooms). Convenienient location on the 2nd floor with elevator.Flat is in city center 7 minutes to Metro Ratusz Arsenal/Ul.andersa 24 tram and bus stops. Perfect location close to everywhere and safe area. Under the flat is supermarkets, pharmacies, restaurants and bars. Whole Flat is fully furnished and without owner.PRICE For 1 room: 1000zl\r\nAvailable from now!Nr tel: 7 95 689 328"                                                                 
[2] "Wynajme pokoje na krotki okres (1-3miesiace)Piekni pokoje do wynajecia W centrum (Metro Ratusz arsenal/Ul.andersa 24) pokóje sa 14m który znajduje się w mieszkaniu 3 pokojowym w bloku dzielnica centrum. Mieszkanie jest kompletnie wyposażone (pralka, sprzęt kuchenny, zmywarka, telewizja kablowa, etc.) \r\nLokalizacja : W centrum, w pobliżu przystanku autobusowy/tramwajowa i metra.\r\nWynajem za 1 pokoj: 1200zl \r\ntel:7 95 689 328\r\nZapraszam\r\nShort term rooms for rent in CITY CENTERLovely Interconnecting 2 Rooms for rent in CITY CENTER. Rooms has 14sq.m offered to the renter, the whole apartment is fully well firshished clean and nice. (55 sq m, 3rooms). Convenienient location on the 2nd floor with elevator. Flat is in city center 7 minutes to Metro Ratusz Arsenal/Ul.andersa 24 tram and bus stops. Perfect location close to everywhere and safe area. Under the flat is supermarkets, pharmacies, restaurants and bars. PRICE for 1 room: 1200zl\r\nAvailable from now!Nr tel: 7 95 689 328"

Ciekawe, że dwie najbardziej skrajne oferty pod względem wielkości to kopie najbardziej skranych ofert pod względem ceny. Oczywiście zawierają one błąd i zostaną usunięte. Sprawdźmy co z nieco mniejszymi.

pokoje %>%
  filter(between(wielkosc, 200, 600)) %>%
  .$opis
 [1] "Hostel z przeznaczeniem dla pracowników i grup zorganizowanych. Bardzo dobre warunki w doskonałej lokalizacji za przyzwoitą cenę.Pokoje 4-, 6- i 8-osobowe.  Także jeden pokój 2-osobowy W każdym pokoju internet WiFi oraz telewizorŁazienki z nowymi prysznicami. Kuchnia w pełni wyposażona (lodówki, kuchenka, mikrofala, garnki, talerze i inne sprzęty. Pralka, żelazko.  Osobna jadalnia z telewizją.Miejsce parkingowe. Cena za osobę w pokoju wieloosobowym:- przy pobycie miesięcznym: 15, 00 zł - 16, 50 zł - 18, 00 zł za dzień (450 zł - 500 zł - 550 zł za miesiąc).- przy pobycie tygodniowym: 21 zł - 26 zł za za dzień (150 zł - 180 zł za tydzień)- przy pobycie 1-6 dni: 25 zł - 35 zł za dzieńCena za cały pokój 2-osobowy:- 90 zł za pokój /dzieńDojazd licznymi tramwajami, autobusami oraz metrem. Metro Wilanowska. Przystanki tramwajowe: Wilanowska lub Niedźwiedzia. Adres: Ul. Świeradowska 49, Mokotów, Warszawa Metro Wilanowska Tel:  602227711Аркадия\" – это гостевой хостел, в 6-ми минутах ходьбы от станции метро «Wilanowska», с очень удобной транспортной развязкой: метро-автобус-трамвай.Дом после капитального ремонта. Предлагаем: качественные номера с 2-4-6-8 местным размещением. Варианты улучшенного и бюджетного проживания. Отдельные комнаты для женщин и мужчин, а также комфортные комнаты для пар и семей с детьми.Работаем 24 часа в сутки.Предлагаем:• Кухня (новое оборудование, микроволновка, электроплита, холодильник, посуда и т.д. ), • Отдельная столовая, • Новые душевые кабины и туалеты, • Бесплатный интернет WiFi , • Комната для стирки и сушки белья, • Утюг и доска для глажки, • Паркинг, • Место на гриль.Для наших клиентов оказываем консультации по вопросам трудоустройства , ВНЖ и ПМЖ в Польше, Иммиграции, выезду семей с детьми в Польшу.Цены на человека за: • 25 zł - 35 zł за сутки• 150 zł - 180 zł за неделю• 450 zł - 500 zł - 550 zł за месяц Хостел располагается в спокойном и безопасном районе. Возле нас располагаются продовольственные магазины, ТЦ «Galeria Mokotów», рестораны, аптеки, почта и тд.Как к нам доехать:метро Вилановска (Wilanowska) Tрамваи: 4, 10, 14, 18, 31, 35 Aвтобусы: 108, 139, 165, 174, 189, 192, 193, 217, 218, 300, 317, 319, 331, 365, 401, 700, 709, 710, 727, 739Ночные автобусы: N01, N33, N37, N50 Hostel Arkadia ul. Świeradowska 49 02-622 Warszawa (Mokotów)602-22-77-11"
 [2] "Warsawa Targówek ul. Oszmiańska 7 okilce Ronda ŻabaOferujemy pokoje 2, 3, 4 osobowe w hotelu pracowniczym .Pokoje umeblowane , TV , lodówka , internet , czyste i ciepłe . Do dyspozycji kuchnia wyposażona w naczynia i niezbędny sprzęt AGD do gotowania. Dwa węzły sanitarne z WC , umywalkami , natryskami oraz pralką. Teren ogrodzony do dyspozycji duży parking strzezony bezpłatny .5 min. do sklepów ( Biedronka , Tesco 24h ) dogodne połączenie siecią autobusową i tramwajową z innymi dzielnicami miasta.CENNIKpojedyncza doba 40zł każda następna 20złtydzień od pn do pi 100zł.tydzień od pn do nd 120złmiesiąc 400zł"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
 [3] "Noclegi. Pokoje dla Pracowników. Kwatery dla firm.Pokoje 2, 3, 4, 5, 6, 7 osobowe.Obiekt sprzątany codziennie. WiFi, parking za darmo.Ceny  pojedyncza doba - 35 zl.                tydzień - 150 zl.               miesiąc - 550 zl. od osoby.Zapraszamy: 575 537 419"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
 [4] "Praca szuka człowieka. 1300zl + pokój na osobnym piętrze. Pierwszy miesiąc próbny 1000zł. Pokój znajduje się na piętrze, gdzie kiedyś był garaż i piwnice, obecnie znajduje się pokój z przeszkloną całą ścianą, wyjściem na małe patio, z którego jest wyjscie na małą uliczkę (osloniete od ulicy), jest tez lazienka i osobno toaleta. Dom jednorodzinny, 3 min pieszo od stacji metra Wierzbno. Opieka nad dzieckiem, pomoc w prowadzeniu domu, opieka nad psem. Dziecko 4 lata (opieka na pół etatu - godziny popołudniowe, ewentualne nadgodziny nieobowiązkowe i płatne dodatkowo). Sprzątanie + opieka nad psami 1-2 h dziennie (głównie odkurzanie - co drugi dzień i pranie), od czasu do czasu pomoc w gotowaniu, pomoc w spacerach z psami (2 starsze psiaki). W domu jest też kot, ale opieka nad nim nie nalezy do obowiazków. Powyższe obowiązki to warunki dla zarobku 1300zł. Mozliwa dodatkowa praca przy sprzątaniu lub prowadzeniu zajęć dla dzieci (pracuję jako nauczycielka języków obcych, organizuję zajęcia dla dzieci oraz spotkania i warsztaty kulinarne dla dzieci i dorosłych). Wymiar pracy może być rozszerzony lub zmniejszony oraz zmodyfikowany, jednak praca tylko z zamieszkaniem.Dziecko jest wychowywane w duchu rodzicielstwa bliskości, bardzo ważny jest szacunek dla potrzeb dziecka, ale i uczenie dziecka szacunku dla innych. Jest bardzo samodzielne, wyluzowane i kontaktowe :) W domu nie jemy mięsa ani produktow wysokoprzetworzonych. Poszukuję osób z otwartą głową, elastycznych (pogodzenie tej pracy ze studiami lub inną pracą dodatkową jest jak najbardziej możliwe), uczciwych i solidnych. Ze swojej strony gwarantuję m.in uczciwość, elastyczność, miłą atmosferę, poszanowanie prywatności, ciekawe możliwości oraz wszelkiego rodzaju pomoc :) Praca jedynie z opcją zamieszkania. Ewentualnie mogę wziąć pod uwagę osoby, które mieszkają blisko stacji metra Wierzbno do dodatkowej, sporadycznej pomocy.Osoby zainteresowane pracą proszę o kontakt mailowyPokój może być dowolnie urządzony, wg gustu :) Zdjęcia sa sprzed remontu, nie ma obecnie tej starej kanapy na tarasiku. sa nowe zaslonki.Wymagana kaucja 800złPokój od 15 pazdziernika!"                                                                                                                                                                                       
 [5] "noclegi 16, 5 Zl\r\nW\r\nnowym, estetycznym, nowoczesnym hostelu oferują łóżka.Pokoje\r\ndla 4 i 6 osób.Zapraszamy\r\ngości miasta, podróżujących w interesach, jak i studentów.\r\nOddzielne pokoje męskie i żeńskie.Miesiąc\r\n= 495 złtydzień\r\n= 149 zł.dzień\r\n= 24, 9 zł.Oferujemy\r\nrównież prywatne pokoje dla 2 - 4 osób.= od 90 zł.Предлагаем\r\nместа в новом, эстетичном, современном\r\nхостеле.Номера\r\nдля 4 и 6 человек.Мы\r\nприветствуем гостей города, деловых\r\nпутешественников и студентов. Отдельные\r\nмужские и женские номера.Месяц\r\n= 495 złнеделя\r\n= 149 злотых.сутки\r\n= 24, 9 злотых.Мы\r\nтакже предлагаем отдельные номера для\r\n2 -. 4-х человек = от 90 злотых."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
 [6] "Noclegi:miejscowość Łazy, Gmina Jerzmanowice okolice Ojcowa-                                              Do Dyspozycji gości:- 1 pok 2 os. łazienką- 2 pok. 2 os z możliwością dostawki- 2 pok 3 os.z możliwością dostawki+ 2 duże łazienki i 2 osobne WC + aneks kuchenny z naczyniami, kuchenka mikrofalowaZAPRASZAMY! :) SZCZEGÓŁY pod nr 12 3895 392, 506 277 466   DOM JEST DO SPRZEDANIA!!"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
 [7] "ZAMYKANY NA KLUCZ, , W OSOBNEJ CZĘŚCI DOMU, UMEBLOWANY W PEŁNI, POZOSTAŁE POKOJE WEJŚCIE Z INNEJ STRONY OD KORYTARZA, OBOK KUCHNIA I ŁAZIENKA, DOJAZD NA pk, DWORZEC LINIĄ 105, AGH 139, UEK 184 SZYBKO W 10 - 15 MINUT, DOBRU W 10 MIN. DOJAZD DO GALERII KRAKOWSKIEJ, 3 PRZYSTANKI, MULTIKUNO, REAL, PARK WODNY, 2 MIN. BANK, SKLEPY, PRZYSTANKI, APTEKAMŁODYM ( NIE DLA PAR) OD ZARAZCZYNSZ W 1- OSOB. 650 ZŁ PLUS MEDIA WG LICZNIKA OK. 200- 300ZŁ MAKS. ZIMĄ LUB MNIEJ W ZALEŻNOŚCI OD CZASU PRZEBYWANIAW 2- OSOB. 400 ZŁ OD OSOBY PLUS MEDIA OK. 140 ZŁ ( PRZY DWÓCH), LICZONE WG LICZNIKÓWKAUCJA ZWROTNA OBOWIĄZUJE, NOWA PRALKA !!TEL. 694 344 594"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
 [8] "W przypadku pytań i rezerwacji prosimy o kontakt telefoniczny: 530 033 423 .OFERTADo dyspozycji gości mamy pokoje 1/2/3/4 osobowe z TV.W hostelu jest darmowe wifi.LOKALIZACJAMieścimy się w budynku zlokalizowanym w willowej części Warszawy. Ulica przy której się znajdujemy jest bardzo cicha, a w niedalekiej odległości znajduje się przystanek autobusowy oraz stacja kolejki podmiejskiej. Z obu miejsc w niecałe 30 minut dojedziesz do centrum miasta.OKOLICABar garmażeryjny - 50 mSklep spożywczy – 400 mRestauracja – 100 mBankomat - 400 mDla nas najważniejsza jest dobra atmosfera. Dbamy o to, aby każdy się u nas czuł komfortowo. W naszym hostelu panuje kameralna atmosfera, cisza, dbamy o to, by goście mogli w spokoju wypocząć.www.wawahostel.pl"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
 [9] "Dom jest 13 kilometrów na południowy zachód od Krakowa.Okolice Włosania Gmina Mogilany.Powiat Kraków.Cena za dobę od 8 do 20 złotych za Osobę.Koszt zależy od ilości Osób, długości najmu oraz liczby zajętych pokoi.Możliwość rozliczenia części należności za najem w pracach remontowo-wykończeniowych typu szpachlowanie, malowanie, instalacje wod -kan, kładzenie glazury i terakoty itpStandard nie jest wysoki ale jakieś minimum typu ciepła woda, toaleta, internet, kuchenka, lodówka są."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
[10] "Witam, Zapraszam do wynajęcia jednego z naszych pokoi. Do wynajęcia mamy 1 pokój jednoosobowy. Dostępny od zaraz. Mieszkanie w bardzo atrakcyjnej lokalizacji blisko metra Kabaty. Mieszkanie składa się z 14 nieprzechodnich pokoi, ogólnodostępnej kuchni, 3 niezależnych łazienek. Wysoki standard.  W przedpokoju ogólnodostępna szafa. W mieszkaniu dostępny szybki internet.Cena: 950 zł miesięcznie plus 150 zl (opłata za media). Kaucja: 1000 zł. (Dla obcokrajowców kaucja wynosi 2000 zł.)Zapraszam do oglądania.Svetlana: 514-322-795."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
[11] "Wynajmę pokoje w unikatowym modernistycznym domu wielorodzinnym z 1937 roku na Starych Dębnikach przy ul. Czarodziejskiej.Czynsz za łóżko w pokoju 2/3 osobowym to 400zł + 50 zł ryczałt za media. Pokoje są wyposażone, ogrzewane i zamykane na klucz. Istnieje również możliwość wynajęcia samodzielnych pokojów - do uzgodnienia na miejscu. Kaucja wynosi jednomiesięczny czynsz. Dom posiada trzy piętra, dwie łazienki i dwie w pełni wyposażone kuchnie, oraz część wspólną na parterze, gdzie znajduje się rzutnik i głośniki. Podłogi są drewniane i każdy pokój ma co najmniej jedno podwójne okno, oraz wyjście na balkon. W budynku znajduje się pralka. Szybkie WiFi w cenie. Świetnie nadaje się dla artystów i freelancerów. Możliwość adaptacji pokojów z wykuszem na pracownię - naturalne światło w pokoju jest prawie od świtu do zmierzchu. Komunikacja: przystanek autobusowy \"Zielińskiego\" w odległości 3 minut piechotą, na tramwaj \"Kapelanka\" 5 minut. III Kampus UJ bardzo blisko. Centrum i Kazimierz 15 minut spacerem. Kontakt przez komórkę +48 882 492 522 lub e-mail na krystian (kropka) derezinski (małpa) gmail (kropka) com *** Rooms for rent in an unique 1937 modernist house located at Czarodziejska street in Dębniki district. Rent for one bed in room for 2/3 person cost 400 PLN monthly + 50 PLN for media. Rooms are equipped, heated and can be locked. There is also possibilty of renting private room - details would be provided on site. Deposit is 100% of monthly rent.House have three floors, two bathrooms, two fully equipped kitchens and common space with projector and hifi. Floors are wooden and rooms are very bright with access to balcony. There is one wasching machine. Fast WiFi for free.Suitable for artists and freelancers. There is possibility of adaptation of one room for painters/sculptor’s workshop - there is very good light.Public transport: bus stop “Zielińskiego” in distance of 3 minutes walking, tram stop “Kapelanka” 5 minutes. Jagiellonian University’s III Campus very close. Old Town and Kazimierz 15 minutes by walking.You can contact us via phone +48 882 492 522 or e-mail at krystian (dot) derezinski (at) gmail (dot) com"                                                                                                                                                                  
[12] "pokoj w domu jednorodzinnym 15m umeblowany mozliwosc parkowania auta pod domem w pelni umeblowany"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
[13] "Zapraszamy do naszych kwater pracowniczych , polozonej blisko skrzyżowania MŁODZIEŃCZA     -RADZYMIŃSKA .\r\nOferujemy pokoje trzy oraz pięcio osobowe.\r\nPokoje są wyposarzone w :\r\n- Łóżka \r\n- Pościel\r\n- Telewizory\r\n- Szafy\r\n- Stoliki\r\nDo wspólnego wykorzystania:\r\n- Kuchnia (lodówka, mikrofalówka, kuchenka gazowa \r\n- Darmowy dostęp do sieci Wi-Fi\r\n- Pralnia\r\n- Darmowy parking\r\n- Miejsce na grill-a\r\n(Obiekt Monitorowany)\r\n\r\nCena za :\r\n- Doba 16\r\n- Miesiąc 500\r\nCeny roznia sie w zaleznosci od  dlugosci pobytu od 16 zl do 30 pln  \r\nKaucja za kluczyk 50 pln , kaucja jest zwrotna"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
[14] "KAWALERSKIE, WIECZÓR PANIEŃSKI, W LESIE NAD RZEKĄ. IMPREZY DLA GRUPY PRZYJACIÓŁ- POKOJE 2, 3, 4 OSOBOWE- KUCHNIA Z PEŁNYM WYPOSAŻENIEM AGD-SALA Z KOMINKIEM NA DRZEWO- MIEJSCE NA OGNISKO I GRILA-TARASY BIESIADNE-TV SATELITARNA- WI-FI-WYŻYWIENIE, STOŁY BIESIADNE, WYROBY WŁASNE.MOŻLIWY SPŁYW KAJAKOWY, SKUTERY WODNE, JACHT MOTOROWY LUB PAINTBALLPEŁNE OFERTY NA EMAILA"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
[15] "Zapraszamy do naszych kwater pracowniczych , polozonej blisko przystanku JORSKIEGO (RADZYMIŃSKA)\r\nOddalonej o 10 min od Dworca Wileńskiego.\r\nOferujemy pokoje trzy oraz pięcio osobowe.\r\nPokoje są wyposarzone w :\r\n- Łóżka \r\n- Pościel\r\n- Telewizory\r\n- Szafy\r\n- Stoliki\r\nDo wspólnego wykorzystania:\r\n- Kuchnia (lodówka, mikrofalówka, kuchenka gazowa, oraz piekarnik)\r\n- Darmowa siłownia \r\n- Darmowy dostęp do sieci Wi-Fi\r\n- Pralnia\r\n- Darmowy parking\r\n- Miejsce na grill-a\r\n(Obiekt Monitorowany)\r\n\r\nCena za :\r\n- Doba 15zł\r\n- Miesiąc 450zł"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
[16] "Do\r\nwynajęcia pokój 20 m2  z  balkonem w segmencie dla mężczyzny\r\nniepalącego, umeblowany, z dostępem do kuchni i łazienki, w cenie\r\nnajmu opłaty za\r\nwszystkie media.Lokalizacja:Warszawa Mokotów Dolny, ul. Aleksandra Dyżewskiego, dobry\r\ndojazd do centrum (autobus 108 i 167).Dostępny od:1 listopada\r\n2016 roku.Kontakt telefoniczny:22 6510456 oraz 517 310\r\n437"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
[17] "Pokoje, Kwatery. krótki i długi termin:Super Punkt Media w Cenie. Ciepło czysto i przytulnie.Na dłużej i krócej. Jeśli jesteś w Warszawie to u mnie znajdziesz ciepły i bezpieczny dach nad głową. Pokoje jedno i wieloosobowe. , K\\kwatery. krótki i długi termin. Cena od 15 zł za doboosobę przy dłuższym pobycie w pokoju czteroosobowym. Serdecznie polecam.509398996, Dojazd do centrum około 25 minut. SKM-ką. Autobusy 521, 147, 146, 119, a także prywatne linie. W okolicy dużo sklepów oraz 10 minut pieszo na pocztę. W pobliżu szkoły i przedszkola. Ceny od 650 zl w pokoju jednoosobowym przy dluższym minimum trzymiesięcznym terminie. Cena za kwaterę od 13 zl za doboosobę. Serdecznie polecam t. 509385961."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
[18] "Предлагаем услуги по недорогому но качественному проживанию в нашем хостеле.\r\n\r\nХостел расположен в районе Wesola, ул. 1-go Praskiego pułku 62 b.\r\n\r\nВ распоряжении наших гостей парковка на 8 паркомест, WI-FI на территории всего дома, бытовая техника на кухне в 35м.кв.\r\n Возможна аренда семейных комнат - стоимость 530 зл одно место в месяц  Возможно как краткосрочное так и долгосрочное проживание. \r\nСтоимость проживания от 17 зл/сутки\r\n Бронирование по телефону: 697-80-20-78\r\n Польский, Русский, Украинский.  Всегда рады гостям!!!  Oferujemy usługi noclegowe na każdą kieszeń w Wesolej. Okolice ulicy 1-go Praskiego pułku 62 b. Piękny dom z dużym parkingiem na terenie posesji. W domu na wyposażeniu znajduje się: ogólnodostępna kuchnia (AGD: 2 duże lodówki, zastawa, wszystko na wyposażeniu) z dużym salonem i jadalnią. Łazienka na każdym piętrze prysznic i wanna, WI-FI, w każdym pokoju. Zmiana pościeli, serwis sprzątający. Dogodny i szybki dojazd do centrum. W okolicy sklepy, duże markety. Serdecznie zapraszamy."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
[19] "Zapraszamy do kwater pracowniczych i hostelu. Warszawa Mokotów ul. Świeradowska Stacja metra Wilanowska. Wolne miejsca w pokojach 4, 6 i 8 osobowych. Blisko Biedronka. Okolica willowa, spokojna. Ceny: 470 - 520 - 570 zł za miesiąc (15, 40-18, 60 zł / za dobę)150 - 180 zł za tydzień30 - 35 zł za dzień602-22-77-11"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
[20] "Witam, Zapraszam do wynajęcia jednego z naszych pokoi. Do wynajęcia mamy  pokoje jednoosobowe oraz pokój dwuosobowy.( w każdym pokoju łóżko , biurko , krzesło, szafa zabudowana)( w pokoju dwuosobowym dwa łóżka jednoosobowe, biurko, krzesło, szafa )Dom w bardzo atrakcyjnej lokalizacji blisko ul. Aleje Jerozolimskie - CH Blue City - CH RedutaDom składa się z nieprzechodnich pokoi, ogólnodostępnej kuchni, 4 niezależnych łazienek plus dodatkowo oddzielne wc.W przedpokoju ogólnodostępna szafa. W mieszkaniu dostępny szybki internet.Mieszkanie zlokalizowane na Włochach ul. Karatowa 75 minut od przystanku autobusowego.15 min dojazd do Centrum10 min dojazd komunikacją do CH Blue City oraz CH Reduta10 min do przystanku PKP WłochyW najbliższej okolicy liczne sklepy spożywcze, punkty usługowe, Centra HandloweKoszt wynajmu pokoju jednoosobowego wynosi 650 zł ( 2 pokoje) oraz 750 zł ( jeden pokój) + 150 zł media (stała opłata za wodę, prąd, gaz, ogrzewanie, internet).Kaucja zwrotna 1000 złKoszt wynajmu pokoju dwuosobowego wynosi  1000 zł ( 500 zł od osoby) + 150 zł media od osoby (stała opłata za wodę, prąd, gaz, ogrzewanie, internet).Kaucja zwrotna 1500 zł. ( 750 zł od osoby)Pokój może być również wynajęty przez jedną osobę za cenę 1000 zł plus 150 zł mediaKaucja zwrotna dla jednej osoby 1000 złKontakt:Przemysław: 508 427 910Osoby zainteresowane zapraszam do oglądania."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
[21] "Zapraszam do wynajęcia nieprzechodniego pokoju jednoosobowego w domu na zamkniętym osiedlu, ulica Algierska.Pokój w pełni umeblowany (łóżko, biurko , szafa, komoda, krzesło). 20 min dojazd komunikacją do CentrumPrzystanek autobusowy 5 minut od domu. W najbliższej okolicy liczne sklepy spożywcze, punkty usługowe, restauracje.Koszt wynajmu pokoju wynosi 700 zł czynsz plus 150 media (stała opłata za wodę, prąd, gaz, ogrzewanie, internet). Kaucja zwrotna 1000 zł. Kontakt: 691 - 952 - 888NIE JESTEŚMY AGENCJĄ. NIE POBIERAMY OPŁAT ZA OGLĄDANIE I UMOWĘ.Osoby zainteresowane zapraszam do oglądania."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
[22] "Akademiki Student-house jest dostepny dla studentów państwowych oraz prywatnych uczeln wyzszych. Chętnie przyjmujemy studentów z zagranicy.Lokalizacja i dojazd:Cicha okolica. Obok domy jednorodzinne. Dom znajduję się w 200 m od przystanku autobusowego Kapeli po ul Piławskiej. Bezpośredni dojazd autobusem 709, 715, lub 739 do Uczelni Łazarskiego za 14 min., do METRO WILANOWSKA – 15 min.Opis domu: Rok budowy 1990, okna PVC, 400 m2 powerchnia mieszkalna, 2 niezależnych wejścia, łącznie 35 miejsc. Działka 700 m2. Na zewnątrz domu się znajduje: Mejsce na parking dla 4-5 samochodów, namiot, barbekiu, zalozony trawnik. Teren dobrze zagospodorowany. Obok znajduje się:McDonalds (850 m), Parafia rzymskokatolicka św. Apostołów Piotra i Pawła (3, 5 km), Centrum Handlowe Ursynów (3, 8 km), Lidl (5, 2 km), Multikino (5, 8 km), Gymnasion Fitness club (2, 9 km).Kuchni:W Hostelu są 2 kuchni posiadające pełne wyposażenie: 2 czajniki elektryczne, 2 czteropalnikowe kuchenki indukcyjne, czteropalnikowa kuchenka elektryczna, , 2 kuchenki mikrofalowe, lodówki, komplet garnków, patelni oraz 2 komplety naczyń (zalecamy jednak posiadanie własnych).Pokoje:Na wyposażeniu każdego pokoju znajdują się: szafa, biurko, łóżko wraz z materacem i kompletem bielizny pościelowej.Cena:Miejsce w pokoju 4-os – 640 zł/155 euro* (cena za miesiąc pobuty, zawiera koszty media);Miejsce w pokoju 2-os – 840 zł/200 euro* (cena za miesiąc pobuty, zawiera koszty media).Kontakt: Oleksandra - 537629463 (polski, ukrainski , angielski, rosyjski)"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
[23] "Wynajmę dom nieumeblowany przy ul.Kasztanowej na Woli Justowskiej dla grupy studentów lub firmie dla pracowników do czerwca 2017 roku.Blisko do przystanku komunikacji autobusowej - 100 metrów, sklep 150 metrów.Kuchnia jest umeblowana, łazienki też umeblowane-pralka automatyczna też jest.Dom posiada wszystkie media - nadaje się do zamieszkania, czysty, ciepły.Miesięcznie 3500 zł. Kaucja 1 miesięczna. Media płaci najemca.Dom może zamieszkiwać kilkanaście osób dzieląc koszty najmu. Tel.663931805 lub przez formularz gumtree . Po podaniu nr telefonu - oddzwonię.Jestem właścicielem, nie ma prowizji.Dom jest w tej chwili niezamieszkały."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
[24] "Проживание в хостеле\r\n\r\n Расположение: Район Wesola, ул. 1-go Praskiego pułku 62 b.\r\n\r\n Удобства: Парковка на 8 паркомест, WI-FI на территории всего дома, бытовая техника на кухне в 35м.кв.\r\n\r\n Краткосрочное и долгосрочное проживание.\r\n\r\n Стоимость проживания:\r\n\r\n Сутки - 35 злотых\r\n\r\n Неделя - 150 злотых\r\n\r\n Месяц - 490 злотых\r\n\r\n Бронирование по телефону.\r\n\r\n Польский, Русский, Украинский.\r\n\r\n Всегда рады гостям !\r\n\r\n\r\n\r\n Okolice ulicy 1-go Praskiego pułku 62 b. \r\n\r\n Piękny dom z dużym parkingiem na terenie posesji. \r\n\r\n W domu na wyposażeniu znajduje się: ogólnodostępna kuchnia (AGD: lodówka, zastawa, wszystko na wyposażeniu) z dużym salonem i jadalnią. Łazienka na każdym piętrze prysznic i wanna, WI-FI, w każdym pokoju. \r\n\r\n Zmiana pościeli, serwis sprzątający.  \r\n\r\n Dogodny i szybki dojazd do centrum. \r\n\r\n W okolicy sklepy, duże markety. \r\n\r\n Serdecznie zapraszamy."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
[25] "Предлагаем проживание в 4-6-8-10 местных номерах в хостеле «Budget Hostel» в самом сердце Варшавы. Так же имеем отдельные двухместные номера. \r\n Новый хостел в сердце Варшавы !!! 500 метров от вокзала Dworzec Warszawa Centralna \r\n 16 номеров: - Двухместный с отдельными кроватями: ПН;ВТ;СР;ВС - 125 зл/номер. ЧТ;ПТ;СБ - 145 зл/номер. Заказ завтрака - 11 зл/чел. - Двухместный с семейной кроватью ПН;ВТ;СР;ВС - 125 зл/номер. ЧТ;ПТ;СБ - 145 зл/номер. Заказ завтрака - 11 зл/чел. - Четырехместные женские; Шестиместные женские; Четырехместные мужские; Шестиместные мужские; Шестиместный микс; Восьмиместный микс; Десятиместный микс. - 45 зл/чел.\r\n\r\nWarszawa, 00-831, ul. Twarda 44. \r\n\r\n Proponujemy przytulne pokoje 4-6-8-10 osobowe w ścisłym sercu stolicy już od 45 zł/osoba/doba !!! W swojej ofercie posiadamy również pokoje i 2 osobowe od 125 zł/pokoj. \r\nAtrakcyjna lokalizacja w centrum Warszawy: 500 metrow od Dworca Warszawa Centralna \r\n Sprawdź już teraz! Zapraszamy!"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
[26] "Pokoje pracownicze dla Firm 8, 10 i więcej osobowych. Hostel świeżo otwarty , nowe łóżka , pościele , wyremontowane łazienki , kuchnie , internet .W pokojach po 4 łózka , parking przy hostelu .Lokalizacja to ul. Stroma 26 w bok od ul.Górczewskiej na przeciwko WOLA PARKU. Koszt zakwaterowania pracowników to 450zł od osoby przy dużych grupach możliwość negocjacji .Zapraszam do współpracy tel -516340240"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
[27] "--> Nasz obiekt znajduje się w dogodnej lokalizacji - w dzielnicy Wawer--> Pokoje 1-2-3-4-osobowe w wysokim standardzie--> Nie jesteśmy brudną i śmierdzącą kwaterą!!!--> Nie posiadamy piętrowych łóżek--> Każdy pokój posiada TV i dostęp do internetu--> Pokoje są bardzo blisko łazienek--> Do dyspozycji jest wspólna, w pełni wyposażona kuchnia--> Przy obiekcie jest dużo miejsc do parkowania--> Cena zależy od ilości osób i czasu trwania najmu--> Sprawdź już teraz, zadzwoń i ustal szczegóły"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
[28] "Wynajmę pokój w bardzo dobrym standardzie w domu na granicy Mokotowa i Wilanowa przy ul. Nałęczowskiej. Budynek znajduje się w pobliżu pętli autobusowej Sadyba, przystanku Wiertnicza oraz przystanku Nałęczowska. W pobliżu wiele sklepów, czynna całodobowo stacja benzynowa, siłownia itd. W pokoju znajduje się łóżko, szafa, biurko, krzesło, fotel, stolik. Wszystko nowe, urządzone z gustem. Pokój jest zamykany na klucz.Do współdzielenia jest kuchnia, dwie łazienki, suszarnia, piwnica. Współlokatorami są młode pracujące osoby.Koszt miesięcznego wynajmu wynosi 900 zł + niewielkie opłaty licznikowe. Kaucja wysokości miesięcznego czynszu możliwa do rozbicia na raty. Umowa na czas nieokreślony z miesięcznym okresem wypowiedzenia. Zapraszam do kontaktu telefonicznego pod nr 503 933 575 i oglądania!Foreigners welcome! For more details call 503 933 575 ."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
[29] "Witam, Zapraszam do wynajęcia jednego z naszych pokoi. Do wynajęcia mamy 1 pokój jednoosobowy. Dostępny od zaraz. Mieszkanie w bardzo atrakcyjnej lokalizacji blisko metra Kabaty. Mieszkanie składa się z 14 nieprzechodnich pokoi, ogólnodostępnej kuchni, 3 niezależnych łazienek. Wysoki standard.  W przedpokoju ogólnodostępna szafa. W mieszkaniu dostępny szybki internet.Cena: 950 zł miesięcznie plus 150 zl (opłata za media). Kaucja: 1000 zł. (Dla obcokrajowców kaucja wynosi 2000 zł.)Zapraszam do oglądania.Svetlana: 514-322-795."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
[30] "noclegi 495 Zl (mies.)\r\nW\r\nnowym, estetycznym, nowoczesnym hostelu oferują łóżka.Pokoje\r\ndla 4 i 6 osób.Zapraszamy\r\ngości miasta, podróżujących w interesach, jak i studentów.\r\nOddzielne pokoje męskie i żeńskie.tydzień\r\n= 150 zł.dzień\r\n= 25 zł.Oferujemy\r\nrównież prywatne pokoje dla 2 - 4 osób.= od 90 zł.Предлагаем\r\nместа в новом, эстетичном, современном\r\nхостеле.Номера\r\nдля 4 и 6 человек.Мы\r\nприветствуем гостей города, деловых\r\nпутешественников и студентов. Отдельные\r\nмужские и женские номера.неделя\r\n= 150 злотых.сутки\r\n= 25 злотых.Мы\r\nтакже предлагаем отдельные номера для\r\n2 -. 4-х человек = от 90 злотых."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
[31] "Oferujemy zakwaterowanie\r\ndla studentów. 4 osoby w pokoju. Wszystkie pokoje są świeżo po remoncie. Bardzo\r\nwygodne, kilka toalety i kuchnie. Wszystko co potrzebne do komfortowego pobytu\r\ni studiów. \r\n150 zł tygodniowo\r\n25 zł za dzień.\r\nWystawiamy faktury, dajemy dokumentację\r\nraportowania. \r\n\r\n\r\n\r\nПредлагаем размещение для студентов. 4 человека в комнате. Все номера\r\nбыли недавно отремонтированы. Очень удобно, несколько туалетов и кухонь. Все, что нужно для комфортного проживания и учебы.150 злотых за неделю25 злотых - в сутки."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
[32] "Pokoje do wynajecia od zaraz   na Wilanowie   Wysoki standard   wi fi Kuchnia"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
[33] "W nowym, estetycznym, nowoczesnym hostelu oferują łóżka.Pokoje dla 4 i 6 osób.Zapraszamy gości miasta, podróżujących w interesach, jak i studentów. Oddzielne pokoje męskie i żeńskie.tydzień = 150 zł.dzień = 28 zł.W CENIE NOCLEGU :-pościel-bespłatny dostęp do sieci WI-FI-wypożyczenie suszarki do włosów oraz żelazka i deski do prasowaniaw pelni wyposazona kuchnia: lodowka, mikrofalowka, kuchenka, czajnik elektryczny, garnki, talerzy, widelca i łyżki, kubki-kawa i herbata-centralne ogrzewanie-zlecenie prania(10zł)Hostel Lubelskiul.Trakt Lubelski 347C515066290"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
[34] "Предлагаем услуги по недорогому но качественному проживанию в нашем хостеле.\r\n\r\nХостел расположен в районе Wesola, ул. 1-go Praskiego pułku 62 b.\r\n\r\nВ распоряжении наших гостей парковка на 8 паркомест, WI-FI на территории всего дома, бытовая техника на кухне в 35м.кв.\r\n Возможна аренда семейных комнат - стоимость 530 зл одно место в месяц  Возможно как краткосрочное так и долгосрочное проживание. \r\nСтоимость проживания от 17 зл/сутки\r\n Бронирование по телефону: 697-80-20-78\r\n Польский, Русский, Украинский.  Всегда рады гостям!!!  Oferujemy usługi noclegowe na każdą kieszeń w Wesolej. Okolice ulicy 1-go Praskiego pułku 62 b. Piękny dom z dużym parkingiem na terenie posesji. W domu na wyposażeniu znajduje się: ogólnodostępna kuchnia (AGD: 2 duże lodówki, zastawa, wszystko na wyposażeniu) z dużym salonem i jadalnią. Łazienka na każdym piętrze prysznic i wanna, WI-FI, w każdym pokoju. Zmiana pościeli, serwis sprzątający. Dogodny i szybki dojazd do centrum. W okolicy sklepy, duże markety. Serdecznie zapraszamy."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
[35] "[POKÓJ WYNAJMĘ]English is belowMamy do wynajęcia (tylko na 3 miesiące) od 1 grudnia 2016 do 1 marca 2017 pokój jedno lub dwuosobowy (dla jednej osoby lub dla pary). Pokój jest umeblowany i ma jedno wielkie łóżko. Mieszkanie ma dwa piętra, 4 pokoje, 2 łazienki, taras i salon gdzie w ciągu dnia spędzamy czas. Nie ma własciciela w mieszkaniu. Cena to 750zl za pokój + 150zł opłaty od osoby. Wysoki standard, wszystko wyposażone. Poszukujemy wesołych i otwartych osób, które będą tworzyły fantastyczny klimat i sprzątały. Lokalizacja: Tatarska 5 (2 przystanki na Rynek Główny). Zapraszamy do ogladania.Hello, There is an available room just for 3 months from December 1st 2016 to March 1st 2017.The room is for a single person or a couple. The room is furnished with a great bed.The apartment has two floors, 4 rooms, 2 bathrooms, a terrace and a lounge where we spend our time together for dinner or something. There is no owner of the apartment. The price is 750 PLN + 150 PLN for one month. Plus refundable deposit of 550 PLN.We are looking for a person who is cheerful and open minded, and takes care of order so that we can create a good atmosphere together.Kontakt tylko telefoniczny:Ania Tel 693852797[English Only] Akane Tel 537168390"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
[36] "Pokoje, Kwatery. krótki i długi termin:Super Punkt Media w Cenie. Ciepło czysto i przytulnie.Na dłużej i krócej. Jeśli jesteś w Warszawie to u mnie znajdziesz ciepły i bezpieczny dach nad głową. Pokoje jedno i wieloosobowe. , K\\kwatery. krótki i długi termin. Cena od 15 zł za doboosobę przy dłuższym pobycie w pokoju czteroosobowym. Serdecznie polecam.509398996, Dojazd do centrum około 25 minut. SKM-ką. Autobusy 521, 147, 146, 119, a także prywatne linie. W okolicy dużo sklepów oraz 10 minut pieszo na pocztę. W pobliżu szkoły i przedszkola. Ceny od 650 zl w pokoju jednoosobowym przy dluższym minimum trzymiesięcznym terminie. Cena za kwaterę od 13 zl za doboosobę. Serdecznie polecam t. 509385961."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
[37] "Pokoje w domku goscinnym od zaraz Najlepsze ceny       od 60 zl od osoby Wysoki standardZAPRASZAMY   wicej informacji telefonicznie"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
[38] "Проживание в хостеле\r\n\r\n Расположение: Район Wesola, ул. 1-go Praskiego pułku 62 b.\r\n\r\n Удобства: Парковка на 8 паркомест, WI-FI на территории всего дома, бытовая техника на кухне в 35м.кв.\r\n\r\n Краткосрочное и долгосрочное проживание.\r\n\r\n Стоимость проживания:\r\n\r\n Сутки - 35 злотых\r\n\r\n Неделя - 150 злотых\r\n\r\n Месяц - 490 злотых\r\n\r\n Бронирование по телефону.\r\n\r\n Польский, Русский, Украинский.\r\n\r\n Всегда рады гостям !\r\n\r\n\r\n\r\n Okolice ulicy 1-go Praskiego pułku 62 b. \r\n\r\n Piękny dom z dużym parkingiem na terenie posesji. \r\n\r\n W domu na wyposażeniu znajduje się: ogólnodostępna kuchnia (AGD: lodówka, zastawa, wszystko na wyposażeniu) z dużym salonem i jadalnią. Łazienka na każdym piętrze prysznic i wanna, WI-FI, w każdym pokoju. \r\n\r\n Zmiana pościeli, serwis sprzątający.  \r\n\r\n Dogodny i szybki dojazd do centrum. \r\n\r\n W okolicy sklepy, duże markety. \r\n\r\n Serdecznie zapraszamy."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
[39] "Предлагаем проживание в 4-6-8-10 местных номерах в хостеле «Budget Hostel» в самом сердце Варшавы. Так же имеем отдельные двухместные номера. \r\n Новый хостел в сердце Варшавы !!! 500 метров от вокзала Dworzec Warszawa Centralna \r\n 16 номеров: - Двухместный с отдельными кроватями: ПН;ВТ;СР;ВС - 125 зл/номер. ЧТ;ПТ;СБ - 145 зл/номер. Заказ завтрака - 11 зл/чел. - Двухместный с семейной кроватью ПН;ВТ;СР;ВС - 125 зл/номер. ЧТ;ПТ;СБ - 145 зл/номер. Заказ завтрака - 11 зл/чел. - Четырехместные женские; Шестиместные женские; Четырехместные мужские; Шестиместные мужские; Шестиместный микс; Восьмиместный микс; Десятиместный микс. - 45 зл/чел.\r\n\r\nWarszawa, 00-831, ul. Twarda 44. \r\n\r\n Proponujemy przytulne pokoje 4-6-8-10 osobowe w ścisłym sercu stolicy już od 45 zł/osoba/doba !!! W swojej ofercie posiadamy również pokoje i 2 osobowe od 125 zł/pokoj. \r\nAtrakcyjna lokalizacja w centrum Warszawy: 500 metrow od Dworca Warszawa Centralna \r\n Sprawdź już teraz! Zapraszamy!"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
[40] "[MIEJSCE W POKOJU 2OSOBOWYM] Hej! Szukamy dziewczyny do pokoju dwuosobowego w domu 'jednorodzinnym'. Budynek znajduje się w spokojnej, zielonej dzielnicy Wola Justowska. Dla pokoju 2 osobowego dedykowana jest osobna łazienka oraz toaleta. Dom znajduje się w bliskiej odległości do przystanków: - Zielony Dół - Królowej JadwigiPozwala to na bezpośredni dojazd na wszystkie główne uczelnie w Krakowie (AGH, UR, UJ, PK, UEK). Czas jazdy do centrum (rynek) nie przekracza 20 minut.Cena wraz z mediami to 500 zł [msc/os]. Więcej informacji udzielę w wiadomości prywatnej"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

Oferty te dotyczą hoteli pracowniczych lub całych domostw. Tym razem to cena podana jest za pokój, a wielkość opisuje metraż całego mieszaknia/domu. Niestety nie ma żadnej konsekwencji w podawaniu przez oferantów ceny i wielkości powierzchni wynajmu. Raz podany jest metraż całego mieszkania z ceną za pokój i liczbą pokojów. Innym razem podany jest metraż pokoju z ceną za wszystkie pokoje i podaną liczbą pokojów. Żeby ustandaryzować te oferty trzebaby przeprowadzić wyrafinowaną analizę treści opisu, lub wprowadzić poprawki ręcznie, czytając każdą ofertę po kolei. Na potrzeby projektu ograniczę się do usunięcia tak skrajnych przypadków, aż nie uzyskam w miarę rozsądnej korelacji między tymi dwoma wartościami.

Przyjrzyjmy sie jeszcze ofertom posiadającym wyjątkowo niską cenę (poniżej 100 PLN) i bardzo mały metraż (10 m^2).

pokoje %>%
  filter(
    cena <= 100,
    wielkosc <= 10
  ) %>%
  .$opis
[1] "DO DYSPOZYCJI GOŚCI ODDAJEMY 36 miejsc noclegowych na dwóch kondygnacjachPosiadamy 6 pokoi 6-osobowych. Oferta skierowana do grup.Pokoje są ogrzewane c.o. i wyposażone w:-łóżka (piętrowe i pojedyncze)-szafę ubraniową-szafki nocne-stół-krzesła-lampkę nocną-gniazdko internetowePonadto na każdym piętrze znajdują się:-aneks sanitarny z natryskami i umywalkami z bieżącą ciepłą i zimną wodą oraz toaletami-w pełni wyposażony aneks kuchennyNa terenie obiektu znajduje się :-sala szkoleniowa z odbiornikiem audiowizualnym-stół do ping ponga-tawerna - restauracja z całodziennym wyzywieniem-winda-siłownia- mała siłownia otwartaNa zamykanym terenie (kamery) mieści się parking, wypożyczalnia sprzętu wodnego (łódki, jachty, kajaki, rowerki wodne i i.in.) oraz miejsce na grilla. W pobliżu znajduje się boisko do koszykówki, plac zabaw, sklepy spożywcze, poczta. Ośrodek szkoleniowo- żeglarski Horn w Krakowie - najtańsze noclegi od 30 zł"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
[2] "HOSTEL tanie noclegi pokoje kwatery do wynajęcia WARSZAWA Wilanów Mokotów\r\n\r\n\r\nPokoje Gościnne w Klimatycznej Willi z lat 70tych na Sadybie-Mokotów\r\nZdrojowa 28 Hostel.\r\n\r\n\r\nwww.Zdrojowa28Hostel.pl\r\n\r\n\r\nInformacje poprzez kontakt telefoniczny 9:00-20:00\r\nlub mailowy \r\nZameldowanie 15:00 - 21:00\r\n\r\n\r\nDoskonałe miejsce dla osób mniej wymagających, ceniących cisze i spokój.\r\nOferujemy ekonomiczne, schludne pokoje w niedalekiej odległości od centrum. Doskonała alternatywa dla zatłoczonych hosteli, hoteli robotniczych. Szybki dojazd do centrum 15 min. autobusem, 10 min. samochodem, W sąsiedztwie Pałac w Wilanowie, Świątynia Opatrzności Bożej, Rezerwat przyrody Jeziorko Czerniakowskie, Park Kultury Powsin, Park Łazienki, Belweder, Trak Królewski.CH Sadyba Best Mall, tereny zielone, kort tenisowy, boiska do piłki nożnej i koszykówki, ogród do dyspozycji gości.\r\nDoskonały dojazd do centrum, zagłębia biurowego na Służewcu (Postępu, Marynarska), Politechnika Warszawska , SGGW, Uniwersytet Warszawski, SGH !\r\n\r\n\r\nZameldowanie 15:00 - 21:00\r\n\r\n\r\nGwarantujemy:\r\nWIFI na terenie całego obiektu\r\naneks kuchenny do dyspozycji\r\nczęść wspólną, jadalnie, pokoje z balkonami\r\npościel, piękną, spokojną okolicę\r\n\r\n\r\nwystawiamy F-VAT\r\n\r\n\r\npokój 1 osobowy studencki, ekonomiczny od 67, 00 zł/doba wspólna łazienka\r\npokój 1 osobowy od 85, 00 zł/ doba wspólna łazienka\r\npokój 2 osobowy od 99, 00 zł/ doba wspólna łazienka\r\npokój 3, 4 osobowy od 129, 00 zł/ doba wspólna łazienka\r\nPokój 3, 4 osobowy z prywatną łazienką od 149, 00 zł/ doba\r\n\r\n\r\n*cena zależy od terminu i długości pobytu\r\n\r\n\r\nZapraszamy na naszą stronę: http://zdrojowa28hostel.pl \r\n\r\n\r\nADRES:\r\nZdrojowa 28 Hostel Apartamenty Wilanów\r\nWarszawa\r\n\r\nul.Zdrojowa 28"
[3] "Do okoła pełno kawiarni i restauracji. Po przejściu mostu jesteśmy w Centrum. Niezwykle cicha okolica z dala od zgiełku miasta."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
[4] "Oferujemy komfortowe pokoje w przystępnej cenie na Bemowie w Warszawie.\r\nPokoje 2, 3-4 osobowe z tv, internetem i czystą pościelą. Kuchnia w pełni wyposażona, 3 łazienki z prysznicem. Bezpieczne miejsca parkingowe.\r\nDoskonała lokalizacja- Warszawa Bemowo blisko Ul.Powstańców Śląskich, Górczewska, Broniewskiego , centru handlowe Carrefour, Wola Park, Arkadia.\r\nKomfortowe pokoje kilkuosobowe  od 25 zł za osobę za dobę do 35 zł za osobę.\r\nCena za miesiąc 580 zł.\r\n\r\nhttp://hotelpracowniczy.com.pl/\r\nWięcej informacji pod numerem telefonu 696-217-277"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
[5] "Jesteś przejazdem w Katowicach i szukasz noclegu blisko centrum? Oferujemy wygodne pokoje w przystępnej cenie. Mieścimy się tylko kilkaset metrów od Spodka w spokojnej dzielnicy - Koszutka. U nas w cenie pokoju pooglądasz kablówkę i skorzystasz z bezpłatnego wifi. Mamy 7 pokoi 2-3 i 4 osobowych.Posiadamy także salę sypialnianą koedukacyjną (cena 40 zł za łóżko za noc) Łazienka z gorącym prysznicem jest wspólna na 2-3 pokoje. Dobrze wyposażony aneks kuchenny jest dostępny dla wszystkich gości. Marzysz o gorącym prysznicu i czystej pościeli na koniec wyczerpującego dnia? ZAPRASZAMY DO NAS!!!Czekamy na was!Hostel Kaktustel. 697246581 - Marcin      690886667 - Darek      rezerwacje@hostelkaktus.pl sprawdź dostępność i zarezerwuj on-line na www.hostelkaktus.pl"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
[6] "Oferujemy komfortowe pokoje w przystępnej cenie na Bemowie w Warszawie.\r\nPokoje 2, 3-4 osobowe z tv, internetem i czystą pościelą. Kuchnia w pełni wyposażona, 3 łazienki z prysznicem. Bezpieczne miejsca parkingowe.\r\nDoskonała lokalizacja- Warszawa Bemowo blisko Ul.Powstańców Śląskich, Górczewska, Broniewskiego , centru handlowe Carrefour, Wola Park, Arkadia.\r\nKomfortowe pokoje kilkuosobowe  od 25 zł za osobę za dobę do 35 zł za osobę.\r\nCena za miesiąc 580 zł.\r\n\r\nhttp://hotelpracowniczy.com.pl/\r\nWięcej informacji pod numerem telefonu 696-217-277"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
[7] "DO DYSPOZYCJI GOŚCI ODDAJEMY 36 miejsc noclegowych na dwóch kondygnacjachPosiadamy 6 pokoi 6-osobowych. Oferta skierowana do grup.Pokoje są ogrzewane c.o. i wyposażone w:-łóżka (piętrowe i pojedyncze)-szafę ubraniową-szafki nocne-stół-krzesła-lampkę nocną-gniazdko internetowePonadto na każdym piętrze znajdują się:-aneks sanitarny z natryskami i umywalkami z bieżącą ciepłą i zimną wodą oraz toaletami-w pełni wyposażony aneks kuchennyNa terenie obiektu znajduje się :-sala szkoleniowa z odbiornikiem audiowizualnym-stół do ping ponga-tawerna - restauracja z całodziennym wyzywieniem-winda-siłownia- mała siłownia otwartaNa zamykanym terenie (kamery) mieści się parking, wypożyczalnia sprzętu wodnego (łódki, jachty, kajaki, rowerki wodne i i.in.) oraz miejsce na grilla. W pobliżu znajduje się boisko do koszykówki, plac zabaw, sklepy spożywcze, poczta. Ośrodek szkoleniowo- żeglarski Horn w Krakowie - najtańsze noclegi od 30 zł"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

W tych ofertach zdecydowanie nieprawidłowo podano wielkość. 6 osobowy pokój raczej nie ma 5 m^2, zaś 3-4 osobowy nie ma 1 m^2.

Co się stanie, gdy ograniczę zestaw danych ze względu na cenę i wielkość przyjmując nieco węższe - eliminujące wadliwe oferty - widełki?

sprawdzenie01 <-
  pokoje %>%
  select(-opis) %>%
  filter(
    between(cena, 100, 1000),
    between(wielkosc, 10, 30)
  )
summary(sprawdzenie01)
              lokalizacja       cena         do_wynajecia_przez                        wspoldzielenie
 Kraków, Małopolskie:693   Min.   : 100.0   Agencja   : 114     Nie podano                    :  98  
 Mokotów            :111   1st Qu.: 550.0   Nie podano: 120     Współdzielenie mieszkania/domu:1084  
 Targówek           : 83   Median : 700.0   Właściciel:1163     Współdzielenie pokoju         : 215  
 Bielany            : 71   Mean   : 679.7                                                            
 Praga Południe     : 70   3rd Qu.: 800.0                                                            
 Ursynów            : 64   Max.   :1000.0                                                            
 (Other)            :305                                                                             
    wielkosc                       liczba_pokoi rodzaj_nieruchomosci        preferowana_plec palacy   
 Min.   :10.00   2 pokoje                :329   Dom       :331       Bez preferencji:908     Nie:680  
 1st Qu.:12.00   3 pokoje                :420   Inne      :147       Kobieta        :299     Tak:717  
 Median :15.00   4 pokoje                :117   Mieszkanie:919       Mężczyzna      :190              
 Mean   :15.73   5 pokoi                 : 53                                                         
 3rd Qu.:20.00   6 lub więcej pokoi      : 41                                                         
 Max.   :30.00   Kawalerka lub garsoniera: 68                                                         
                 Nie podano              :369                                                         
 przyjazne_zwierzakom liczba_wyrazow  
 Nie:631              Min.   :  2.00  
 Tak:766              1st Qu.: 37.00  
                      Median : 70.00  
                      Mean   : 86.99  
                      3rd Qu.:115.00  
                      Max.   :558.00  
                                      
plot(cena~wielkosc, sprawdzenie01)
fit01 <- lm(cena~wielkosc, sprawdzenie01)
abline(fit01, col = "red")

Nieintuicyjnie cena pokojów do wynajęcia spada wraz ze wzrostem metrażu. Może być to spowodowane dalszą niekonsekwencją we wprowadzaniu danych przez oferantów. Na tym etapie postanowiłem przyjrzeć się innym danym z portalu gumtree.pl. Tym razem oferty dotyczą mieszkań i domów do wynajęcia. Ponieważ ofert jest w sumie niemalże 30 tysięcy postanowiłem ograniczyć się do Warszawy (13 tysięcy ofert) już na etapie scrapowania danych.

Dla mieszkań i domów zmieniły się dwa atrybuty do nadania ofertom. Zniknęły kolumny wspoldzielenie i preferowana_pleć zaś pojawiły się parking oraz liczba_lazienek. Tym razem ciężko o pomyłkę przy wpisywaniu ceny - mieszaknie jest traktowane jako całość i niezależnie od ilości pokojów cena powinna być podana za całość. To samo tyczy się metrażu. Sprawdźmy więc, czy aby napewno tak jest. Najpierw jednak uporządkujmy dane.

mieszkania <- read_csv("2016-11-23_Warszawa_df.csv")
Parsed with column specification:
cols(
  data_dodania = col_character(),
  lokalizacja = col_character(),
  href = col_character(),
  opis = col_character(),
  adres = col_character(),
  cena = col_character(),
  tytuł = col_character(),
  do_wynajęcia_przez = col_character(),
  liczba_pokoi = col_character(),
  rodzaj_nieruchomości = col_character(),
  `wielkość_(m2)` = col_integer(),
  parking = col_character(),
  liczba_łazienek = col_character(),
  dostępny = col_character(),
  palący = col_character(),
  przyjazne_zwierzakom = col_character()
)
mieszkania %>% names()
 [1] "data_dodania"         "lokalizacja"          "href"                 "opis"                
 [5] "adres"                "cena"                 "tytuł"                "do_wynajęcia_przez"  
 [9] "liczba_pokoi"         "rodzaj_nieruchomości" "wielkość_(m2)"        "parking"             
[13] "liczba_łazienek"      "dostępny"             "palący"               "przyjazne_zwierzakom"
names(mieszkania) <-
  names(mieszkania) %>% chartr("ąęółćśźż", "aeolcszz", .)
mieszkania <-
  mieszkania %>%
  rename(wielkosc  = `wielkosc_(m2)`) %>%
  select(-c(data_dodania, href, adres, tytul, dostepny)) %>%
  mutate(
    liczba_wyrazow = stri_count_words(opis)
  )
mieszkania %>%
  select(-opis) %>%
  lapply(
    function(x) {
      x %>%
        table(useNA = "always") %>%
        sort(decreasing = TRUE) %>%
        head(20)
    }
  )
$lokalizacja
.
       Mokotów, Warszawa    Śródmieście, Warszawa           Wola, Warszawa Praga Południe, Warszawa 
                    3756                     3217                     1184                      945 
       Wilanów, Warszawa        Ursynów, Warszawa         Ochota, Warszawa        Bielany, Warszawa 
                     900                      717                      686                      553 
        Bemowo, Warszawa       Żoliborz, Warszawa          Wawer, Warszawa   Praga Północ, Warszawa 
                     458                      457                      209                      178 
     Białołęka, Warszawa       Targówek, Warszawa         Włochy, Warszawa          Ursus, Warszawa 
                     169                      152                      143                       84 
        Wesoła, Warszawa      Rembertów, Warszawa                     <NA> 
                      26                       15                        0 

$cena
.
        2 500 zł         3 000 zł         3 500 zł         2 400 zł         2 600 zł         2 300 zł 
             906              550              535              510              466              457 
        2 800 zł         2 200 zł         2 100 zł         4 500 zł         4 000 zł Proszę o kontakt 
             405              397              387              365              350              350 
        2 000 zł         2 700 zł         3 200 zł         2 900 zł         6 000 zł         5 500 zł 
             337              337              326              283              233              223 
        6 500 zł         5 000 zł 
             223              215 

$do_wynajecia_przez
.
   Agencja Właściciel       <NA> 
     11458       2266        125 

$liczba_pokoi
.
                2 pokoje                 3 pokoje                 4 pokoje Kawalerka lub garsoniera 
                    6945                     3419                     1066                      999 
      6 lub więcej pokoi                  5 pokoi                     <NA> 
                     813                      478                      129 

$rodzaj_nieruchomosci
.
Mieszkanie        Dom       <NA>       Inne 
     12581       1122        115         31 

$wielkosc
.
 50  40  60  55  56  38  48  35  52  45  54  70  46  42  58  80  53  57  44 100 
732 447 402 333 333 314 314 313 311 301 289 283 263 260 249 228 222 222 214 207 

$parking
.
 <NA> Garaż Ulica Kryty  Brak 
 6875  3532  1948  1375   119 

$liczba_lazienek
.
           1 łazienka                  <NA>            2 łazienki            3 łazienki 4 lub więcej łazienek 
                 6562                  6033                  1042                   150                    62 

$palacy
.
 <NA>   Nie   Tak 
12194  1410   245 

$przyjazne_zwierzakom
.
 <NA>   Nie   Tak 
11597  1427   825 

$liczba_wyrazow
.
160 154  67 162 136 156 161 150  96 184 155 135  95 152 158 164  74 104 147 148 
138 130 122 122 110 110 109 108 107 106 103 102 101 101 101 101 100 100 100  99 
mieszkania <-
  mieszkania %>%
  filter(
    !(cena %in% c("Proszę o kontakt", "Wymiana/zamiana")),
    !is.na(wielkosc)
  ) %>%
  mutate(
    lokalizacja = lokalizacja %>%
      stri_replace_first_regex(", Warszawa", "") %>%
      as.factor(),
    do_wynajecia_przez = do_wynajecia_przez %>%
      plyr::mapvalues(NA, "Nie podano") %>%
      as.factor(),
    parking = parking %>%
      plyr::mapvalues(NA, "Nie podano") %>%
      as.factor(),
    liczba_pokoi = liczba_pokoi %>%
      plyr::mapvalues(NA, "Nie podano") %>%
      as.factor(),
    rodzaj_nieruchomosci = rodzaj_nieruchomosci %>%
      plyr::mapvalues(NA, "Inne") %>%
      as.factor(),
    liczba_lazienek = liczba_lazienek %>%
      plyr::mapvalues(NA, "Nie podano") %>%
      as.factor(),
    palacy = palacy %>%
      plyr::mapvalues(NA, "Tak") %>%
      as.factor(),
    przyjazne_zwierzakom = przyjazne_zwierzakom %>%
      plyr::mapvalues(NA, "Tak") %>%
      as.factor(),
    cena = stri_extract_all_regex(
      cena, "[[:digit:]]"
    ) %>%
      stri_join_list() %>%
      as.integer()
  )
mieszkania %>% summary()
         lokalizacja       opis                cena          do_wynajecia_przez                   liczba_pokoi 
 Mokotów       :3680   Length:13390       Min.   :     20   Agencja   :11303    2 pokoje                :6745  
 Śródmieście   :3129   Class :character   1st Qu.:   2400   Nie podano:   83    3 pokoje                :3345  
 Wola          :1138   Mode  :character   Median :   3000   Właściciel: 2004    4 pokoje                :1040  
 Praga Południe: 908                      Mean   :   4685                       5 pokoi                 : 467  
 Wilanów       : 883                      3rd Qu.:   4500                       6 lub więcej pokoi      : 798  
 Ursynów       : 688                      Max.   :2133000                       Kawalerka lub garsoniera: 927  
 (Other)       :2964                                                            Nie podano              :  68  
 rodzaj_nieruchomosci    wielkosc             parking                  liczba_lazienek palacy     
 Dom       : 1086     Min.   :   1.00   Brak      : 107   1 łazienka           :6289   Nie: 1287  
 Inne      :   97     1st Qu.:  46.00   Garaż     :3430   2 łazienki           : 988   Tak:12103  
 Mieszkanie:12207     Median :  58.00   Kryty     :1365   3 łazienki           : 143              
                      Mean   :  87.65   Nie podano:6634   4 lub więcej łazienek:  57              
                      3rd Qu.:  88.00   Ulica     :1854   Nie podano           :5913              
                      Max.   :6000.00                                                             
                                                                                                  
 przyjazne_zwierzakom liczba_wyrazow 
 Nie: 1334            Min.   :  2.0  
 Tak:12056            1st Qu.: 89.0  
                      Median :133.0  
                      Mean   :140.5  
                      3rd Qu.:171.0  
                      Max.   :611.0  
                                     

Ponownie skrajne wartości ceny i wielkości są podejrzane. Przypatrzmy się im bliżej.

plot(cena~wielkosc, mieszkania)

sprawdzenie11 <-
  mieszkania %>%
  filter(
    cena <= 100000,
    wielkosc <= 1000
  )
plot(cena~wielkosc, sprawdzenie11)

sprawdzenie12 <-
  mieszkania %>%
  filter(
    cena <= 10000,
    wielkosc <= 200
  )
plot(cena~wielkosc, sprawdzenie12)

sprawdzenie13 <-
  mieszkania %>%
  filter(
    between(cena, 1000, 5000),
    between(wielkosc, 20, 100)
  )
plot(cena~wielkosc, sprawdzenie13)

sprawdzenie14 <-
  mieszkania %>%
  filter(
    between(cena, 1000, 15000),
    between(wielkosc, 20, 400)
  )
plot(cena~wielkosc, sprawdzenie14)

sprawdzenie15 <-
  mieszkania %>%
  filter(
    between(cena, 1000, 10000),
    between(wielkosc, 20, 200)
  )
plot(cena~wielkosc, sprawdzenie15)

sprawdzenie16 <-
  mieszkania %>%
  filter(
    between(cena, 1000, 10000),
    between(wielkosc, 20, 100)
  )
plot(cena~wielkosc, sprawdzenie16)

Tym razem dane wyglądają znacznie bardziej obiecująco. Da się zauważyć korelację między wielkością mieszkania a ceną. Kawalerki zaczynają się od około 20 m^2. Duże 3-4 pokojowe mieszkania liczą sobie do 100 m^2. Skrajne wartości tej skali mają stosunek 1:4. W taki sam sposób dobrano widełki do cen. Są to typowe przedziały cen wynajmu i wielkości mieszkań.

dane <-
  sprawdzenie13 %>%
  select(-opis)
summary(dane)
         lokalizacja        cena       do_wynajecia_przez                   liczba_pokoi  rodzaj_nieruchomosci
 Mokotów       :2626   Min.   :1000   Agencja   :8062     2 pokoje                :6590   Dom       :  47     
 Śródmieście   :2251   1st Qu.:2300   Nie podano:  69     3 pokoje                :2280   Inne      :  76     
 Wola          :1045   Median :2650   Właściciel:1874     4 pokoje                : 220   Mieszkanie:9882     
 Praga Południe: 748   Mean   :2843                       5 pokoi                 :   5                       
 Ochota        : 548   3rd Qu.:3300                       6 lub więcej pokoi      :   1                       
 Ursynów       : 536   Max.   :5000                       Kawalerka lub garsoniera: 884                       
 (Other)       :2251                                      Nie podano              :  25                       
    wielkosc            parking                  liczba_lazienek palacy     przyjazne_zwierzakom liczba_wyrazow 
 Min.   : 20.00   Brak      :  93   1 łazienka           :5902   Nie:1193   Nie:1241             Min.   :  2.0  
 1st Qu.: 43.00   Garaż     :2758   2 łazienki           : 451   Tak:8812   Tak:8764             1st Qu.: 85.0  
 Median : 52.00   Kryty     : 574   3 łazienki           :   1                                   Median :129.0  
 Mean   : 54.15   Nie podano:5024   4 lub więcej łazienek:   1                                   Mean   :134.4  
 3rd Qu.: 62.00   Ulica     :1556   Nie podano           :3650                                   3rd Qu.:167.0  
 Max.   :100.00                                                                                  Max.   :528.0  
                                                                                                                

Regresja liniowa

Funkcja liniowa

plot(cena~wielkosc, dane)
fit11 <- lm(cena~wielkosc, dane)
summary(fit11)

Call:
lm(formula = cena ~ wielkosc, data = dane)

Residuals:
     Min       1Q   Median       3Q      Max 
-2751.84  -397.47   -71.16   353.40  2337.61 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 943.1021    21.2184   44.45   <2e-16 ***
wielkosc     35.0874     0.3761   93.28   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 595.1 on 10003 degrees of freedom
Multiple R-squared:  0.4652,    Adjusted R-squared:  0.4652 
F-statistic:  8702 on 1 and 10003 DF,  p-value: < 2.2e-16
abline(fit11, col = "red", lwd = 2)

Zobaczmy jak cena zależy od pozostałych predyktorów.

fit12 <-
  lm(cena~., dane)
summary(fit12)

Call:
lm(formula = cena ~ ., data = dane)

Residuals:
     Min       1Q   Median       3Q      Max 
-2396.82  -306.71   -41.21   265.44  2360.59 

Coefficients:
                                       Estimate Std. Error t value Pr(>|t|)    
(Intercept)                           704.07025  100.83986   6.982 3.09e-12 ***
lokalizacjaBiałołęka                 -237.87954   49.06485  -4.848 1.26e-06 ***
lokalizacjaBielany                    193.75822   33.80390   5.732 1.02e-08 ***
lokalizacjaMokotów                    626.75092   26.80746  23.380  < 2e-16 ***
lokalizacjaOchota                     515.49644   32.69096  15.769  < 2e-16 ***
lokalizacjaPraga Północ               421.57712   48.98762   8.606  < 2e-16 ***
lokalizacjaPraga Południe             244.85947   30.79142   7.952 2.03e-15 ***
lokalizacjaRembertów                 -103.54603  175.54770  -0.590 0.555308    
lokalizacjaŚródmieście                808.88225   27.17290  29.768  < 2e-16 ***
lokalizacjaTargówek                   -71.46235   51.15987  -1.397 0.162492    
lokalizacjaUrsus                     -127.28971   70.98582  -1.793 0.072976 .  
lokalizacjaUrsynów                    212.77260   32.69910   6.507 8.04e-11 ***
lokalizacjaWawer                     -259.87870   68.24197  -3.808 0.000141 ***
lokalizacjaWesoła                    -749.57663  175.97769  -4.259 2.07e-05 ***
lokalizacjaWilanów                    463.15588   34.79566  13.311  < 2e-16 ***
lokalizacjaWłochy                     192.77545   59.20619   3.256 0.001134 ** 
lokalizacjaWola                       564.26670   29.31494  19.248  < 2e-16 ***
lokalizacjaŻoliborz                   529.07429   36.26477  14.589  < 2e-16 ***
do_wynajecia_przezNie podano          -39.40269   59.75994  -0.659 0.509687    
do_wynajecia_przezWłaściciel         -193.03556   15.51514 -12.442  < 2e-16 ***
liczba_pokoi3 pokoje                  189.35420   15.84874  11.948  < 2e-16 ***
liczba_pokoi4 pokoje                  243.86488   37.67650   6.473 1.01e-10 ***
liczba_pokoi5 pokoi                   192.41558  220.86949   0.871 0.383681    
liczba_pokoi6 lub więcej pokoi         75.86677  493.20126   0.154 0.877751    
liczba_pokoiKawalerka lub garsoniera -185.85131   19.56732  -9.498  < 2e-16 ***
liczba_pokoiNie podano                  7.33078   99.39017   0.074 0.941205    
rodzaj_nieruchomosciInne             -307.34257   94.54000  -3.251 0.001154 ** 
rodzaj_nieruchomosciMieszkanie       -130.39173   76.08872  -1.714 0.086619 .  
wielkosc                               27.49387    0.49561  55.475  < 2e-16 ***
parkingGaraż                          250.91295   52.43018   4.786 1.73e-06 ***
parkingKryty                           49.78108   55.62628   0.895 0.370851    
parkingNie podano                     -22.05660   51.94819  -0.425 0.671146    
parkingUlica                          -68.65787   52.56456  -1.306 0.191527    
liczba_lazienek2 łazienki              54.60075   25.91378   2.107 0.035141 *  
liczba_lazienek3 łazienki            -416.93398  491.30932  -0.849 0.396114    
liczba_lazienek4 lub więcej łazienek -599.71339  491.39611  -1.220 0.222332    
liczba_lazienekNie podano             208.91558   12.23168  17.080  < 2e-16 ***
palacyTak                              18.58975   20.93136   0.888 0.374493    
przyjazne_zwierzakomTak                -6.66947   18.91470  -0.353 0.724390    
liczba_wyrazow                          1.00732    0.07335  13.732  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 490.8 on 9965 degrees of freedom
Multiple R-squared:  0.6377,    Adjusted R-squared:  0.6363 
F-statistic: 449.8 on 39 and 9965 DF,  p-value: < 2.2e-16
plot(fit12)
not plotting observations with leverage one:
  4141

not plotting observations with leverage one:
  4141

NaNs producedNaNs produced

Okazuje się, że predyktory palacy oraz przyjazne_zwierzakom nie są istotne w zbudowanym modelu. Dla uproszczenia go usuniemy te dwie kolumny. Pozostałe nieistotne parametry należą do grup czynników, z których część jest istotna, dlatego nie zostaną usunięte (należałoby wtedy usunąć też te istotne). Można zaobserwować, że stworzona nowa zmienna dotycząca liczby słów w ofercie jest bardzo istotnym predyktorem w naszym modelu.

fit13 <-
  lm(cena~.-palacy-przyjazne_zwierzakom, dane)
summary(fit13)

Call:
lm(formula = cena ~ . - palacy - przyjazne_zwierzakom, data = dane)

Residuals:
     Min       1Q   Median       3Q      Max 
-2396.22  -304.85   -40.15   265.41  2365.51 

Coefficients:
                                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)                           712.1602    99.5419   7.154 9.00e-13 ***
lokalizacjaBiałołęka                 -237.9705    49.0467  -4.852 1.24e-06 ***
lokalizacjaBielany                    194.5367    33.7906   5.757 8.81e-09 ***
lokalizacjaMokotów                    627.6341    26.7809  23.436  < 2e-16 ***
lokalizacjaOchota                     515.9436    32.6830  15.786  < 2e-16 ***
lokalizacjaPraga Północ               420.8601    48.9708   8.594  < 2e-16 ***
lokalizacjaPraga Południe             245.4484    30.7825   7.974 1.71e-15 ***
lokalizacjaRembertów                 -102.8265   175.5255  -0.586 0.558009    
lokalizacjaŚródmieście                809.8175    27.1509  29.827  < 2e-16 ***
lokalizacjaTargówek                   -71.7125    51.1552  -1.402 0.160988    
lokalizacjaUrsus                     -128.1804    70.8767  -1.808 0.070559 .  
lokalizacjaUrsynów                    213.7893    32.6772   6.542 6.35e-11 ***
lokalizacjaWawer                     -261.5256    68.1980  -3.835 0.000126 ***
lokalizacjaWesoła                    -748.0420   175.9409  -4.252 2.14e-05 ***
lokalizacjaWilanów                    464.4916    34.7410  13.370  < 2e-16 ***
lokalizacjaWłochy                     195.0741    59.0832   3.302 0.000964 ***
lokalizacjaWola                       564.9185    29.3026  19.279  < 2e-16 ***
lokalizacjaŻoliborz                   529.1616    36.2569  14.595  < 2e-16 ***
do_wynajecia_przezNie podano          -40.6126    59.7340  -0.680 0.496589    
do_wynajecia_przezWłaściciel         -198.0321    14.1090 -14.036  < 2e-16 ***
liczba_pokoi3 pokoje                  189.9214    15.8236  12.002  < 2e-16 ***
liczba_pokoi4 pokoje                  244.6579    37.6529   6.498 8.54e-11 ***
liczba_pokoi5 pokoi                   193.0140   220.8508   0.874 0.382163    
liczba_pokoi6 lub więcej pokoi         80.8178   493.1401   0.164 0.869826    
liczba_pokoiKawalerka lub garsoniera -187.1034    19.5130  -9.589  < 2e-16 ***
liczba_pokoiNie podano                  7.7294    99.3604   0.078 0.937995    
rodzaj_nieruchomosciInne             -304.8877    94.4584  -3.228 0.001252 ** 
rodzaj_nieruchomosciMieszkanie       -129.6030    76.0278  -1.705 0.088285 .  
wielkosc                               27.4854     0.4944  55.592  < 2e-16 ***
parkingGaraż                          253.6139    52.3288   4.847 1.28e-06 ***
parkingKryty                           51.9306    55.5460   0.935 0.349857    
parkingNie podano                     -18.9926    51.7772  -0.367 0.713766    
parkingUlica                          -67.5128    52.5394  -1.285 0.198824    
liczba_lazienek2 łazienki              54.0467    25.9047   2.086 0.036970 *  
liczba_lazienek3 łazienki            -417.1775   491.2795  -0.849 0.395810    
liczba_lazienek4 lub więcej łazienek -599.8718   491.3659  -1.221 0.222181    
liczba_lazienekNie podano             209.6856    12.1026  17.326  < 2e-16 ***
liczba_wyrazow                          1.0032     0.0732  13.706  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 490.7 on 9967 degrees of freedom
Multiple R-squared:  0.6377,    Adjusted R-squared:  0.6364 
F-statistic: 474.2 on 37 and 9967 DF,  p-value: < 2.2e-16
plot(fit13)
not plotting observations with leverage one:
  4141

not plotting observations with leverage one:
  4141

NaNs producedNaNs produced

Spróbujmy wykorzystać interakcję miedzy dwoma predyktorami - lokalizacja i wielkosc.

fit14 <-
  lm(cena~.+lokalizacja*wielkosc, dane)
summary(fit14)

Call:
lm(formula = cena ~ . + lokalizacja * wielkosc, data = dane)

Residuals:
     Min       1Q   Median       3Q      Max 
-2489.73  -298.90   -39.64   255.47  2367.05 

Coefficients:
                                       Estimate Std. Error t value Pr(>|t|)    
(Intercept)                          1374.55688  144.83668   9.490  < 2e-16 ***
lokalizacjaBiałołęka                  -82.90232  183.05073  -0.453 0.650636    
lokalizacjaBielany                    120.91408  131.16435   0.922 0.356628    
lokalizacjaMokotów                   -184.33139  114.84130  -1.605 0.108504    
lokalizacjaOchota                     181.10415  127.48266   1.421 0.155459    
lokalizacjaPraga Północ              -399.76798  177.64268  -2.250 0.024445 *  
lokalizacjaPraga Południe            -269.50796  128.70292  -2.094 0.036282 *  
lokalizacjaRembertów                  109.74751  684.51929   0.160 0.872626    
lokalizacjaŚródmieście                 27.14971  114.14499   0.238 0.812000    
lokalizacjaTargówek                    53.77617  181.58811   0.296 0.767127    
lokalizacjaUrsus                     -137.76178  270.28044  -0.510 0.610273    
lokalizacjaUrsynów                   -399.80201  140.00798  -2.856 0.004305 ** 
lokalizacjaWawer                      -18.36094  216.11121  -0.085 0.932294    
lokalizacjaWesoła                    -510.13982  596.12977  -0.856 0.392155    
lokalizacjaWilanów                   -283.97696  138.16816  -2.055 0.039876 *  
lokalizacjaWłochy                     166.42562  194.93889   0.854 0.393274    
lokalizacjaWola                       211.05453  125.35235   1.684 0.092273 .  
lokalizacjaŻoliborz                  -402.16764  138.89507  -2.895 0.003794 ** 
do_wynajecia_przezNie podano          -49.92389   58.95881  -0.847 0.397150    
do_wynajecia_przezWłaściciel         -192.58799   15.35378 -12.543  < 2e-16 ***
liczba_pokoi3 pokoje                  190.24173   15.73718  12.089  < 2e-16 ***
liczba_pokoi4 pokoje                  329.77387   38.14501   8.645  < 2e-16 ***
liczba_pokoi5 pokoi                   134.36978  218.18204   0.616 0.538000    
liczba_pokoi6 lub więcej pokoi       -211.17161  490.57201  -0.430 0.666870    
liczba_pokoiKawalerka lub garsoniera -203.51629   19.41928 -10.480  < 2e-16 ***
liczba_pokoiNie podano                -40.61121   98.35203  -0.413 0.679676    
rodzaj_nieruchomosciInne             -366.41945   94.60006  -3.873 0.000108 ***
rodzaj_nieruchomosciMieszkanie       -191.08330   76.83905  -2.487 0.012906 *  
wielkosc                               16.76707    1.89570   8.845  < 2e-16 ***
parkingGaraż                          253.57132   51.74185   4.901 9.70e-07 ***
parkingKryty                           52.72666   54.88575   0.961 0.336745    
parkingNie podano                     -15.61763   51.26040  -0.305 0.760622    
parkingUlica                          -61.23793   51.89480  -1.180 0.238013    
liczba_lazienek2 łazienki              82.26306   25.76470   3.193 0.001413 ** 
liczba_lazienek3 łazienki            -569.39599  484.81218  -1.174 0.240236    
liczba_lazienek4 lub więcej łazienek -599.12457  484.59803  -1.236 0.216364    
liczba_lazienekNie podano             199.87616   12.09508  16.525  < 2e-16 ***
palacyTak                              36.18454   20.67594   1.750 0.080135 .  
przyjazne_zwierzakomTak               -15.55707   18.71130  -0.831 0.405753    
liczba_wyrazow                          0.98732    0.07237  13.643  < 2e-16 ***
lokalizacjaBiałołęka:wielkosc          -3.59443    3.18289  -1.129 0.258799    
lokalizacjaBielany:wielkosc             0.11296    2.27161   0.050 0.960342    
lokalizacjaMokotów:wielkosc            14.26856    1.94057   7.353 2.09e-13 ***
lokalizacjaOchota:wielkosc              5.45024    2.17239   2.509 0.012128 *  
lokalizacjaPraga Północ:wielkosc       14.41046    3.02408   4.765 1.91e-06 ***
lokalizacjaPraga Południe:wielkosc      8.76218    2.21566   3.955 7.72e-05 ***
lokalizacjaRembertów:wielkosc          -7.07025   14.22066  -0.497 0.619072    
lokalizacjaŚródmieście:wielkosc        13.83146    1.93206   7.159 8.71e-13 ***
lokalizacjaTargówek:wielkosc           -3.52585    3.23411  -1.090 0.275648    
lokalizacjaUrsus:wielkosc              -0.12333    4.63532  -0.027 0.978775    
lokalizacjaUrsynów:wielkosc            10.59094    2.32855   4.548 5.47e-06 ***
lokalizacjaWawer:wielkosc              -4.34830    3.54298  -1.227 0.219739    
lokalizacjaWesoła:wielkosc             -2.11969    8.53084  -0.248 0.803773    
lokalizacjaWilanów:wielkosc            12.83874    2.28903   5.609 2.09e-08 ***
lokalizacjaWłochy:wielkosc              0.84539    3.09373   0.273 0.784659    
lokalizacjaWola:wielkosc                5.51794    2.18498   2.525 0.011572 *  
lokalizacjaŻoliborz:wielkosc           16.57596    2.38374   6.954 3.78e-12 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 483.6 on 9948 degrees of freedom
Multiple R-squared:  0.6488,    Adjusted R-squared:  0.6468 
F-statistic: 328.2 on 56 and 9948 DF,  p-value: < 2.2e-16
plot(fit14)
not plotting observations with leverage one:
  4141

not plotting observations with leverage one:
  4141

NaNs producedNaNs produced

Okazuje się, że ta zależność jest istotna dla modelu. Otrzymujemy większe o 1.5% Adjusted R^2.

Wielomiany

Spróbujmy teraz dopasować model nieliniowy. Najpierw od samej wielkości mieszkania.

plot(cena~wielkosc, dane)
fit21 <-
  lm(cena~wielkosc+I(wielkosc^2), dane)
summary(fit21)

Call:
lm(formula = cena ~ wielkosc + I(wielkosc^2), data = dane)

Residuals:
     Min       1Q   Median       3Q      Max 
-2564.89  -391.64   -62.57   357.77  2314.42 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)   482.79763   62.61387   7.711 1.37e-14 ***
wielkosc       51.80885    2.17341  23.838  < 2e-16 ***
I(wielkosc^2)  -0.13988    0.01791  -7.811 6.25e-15 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 593.4 on 10002 degrees of freedom
Multiple R-squared:  0.4685,    Adjusted R-squared:  0.4684 
F-statistic:  4408 on 2 and 10002 DF,  p-value: < 2.2e-16
points(dane$wielkosc, fitted(fit21), col = "blue", pch = 20)
abline(fit11, col = "red", lwd = 2)

Podsumowanie komunikuje nam, że wielkość w drugiej potędze jest istotnym czynnikiem. Jednakże widać na powyższym wykresie i po wartości Adjusted R^2 jak nieznacznie różnią się od siebie krzywe predykcyjne.

Z ciekawości sprawdźmy jak będzie wyglądał model dla jeszcze większego stopnia wielomianu.

plot(cena~wielkosc, dane)
fit22 <-
  lm(cena~poly(wielkosc, 6), dane)
summary(fit22)

Call:
lm(formula = cena ~ poly(wielkosc, 6), data = dane)

Residuals:
     Min       1Q   Median       3Q      Max 
-2218.47  -390.43   -52.45   351.51  2332.68 

Coefficients:
                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)         2843.019      5.905 481.430  < 2e-16 ***
poly(wielkosc, 6)1 55517.286    590.684  93.988  < 2e-16 ***
poly(wielkosc, 6)2 -4634.669    590.684  -7.846 4.72e-15 ***
poly(wielkosc, 6)3 -3666.422    590.684  -6.207 5.61e-10 ***
poly(wielkosc, 6)4 -4240.237    590.684  -7.179 7.55e-13 ***
poly(wielkosc, 6)5 -1119.607    590.684  -1.895   0.0581 .  
poly(wielkosc, 6)6   703.338    590.684   1.191   0.2338    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 590.7 on 9998 degrees of freedom
Multiple R-squared:  0.4735,    Adjusted R-squared:  0.4732 
F-statistic:  1498 on 6 and 9998 DF,  p-value: < 2.2e-16
points(dane$wielkosc, fitted(fit22), col = "green", pch = 20)
points(dane$wielkosc, fitted(fit21), col = "blue", pch = 20)
abline(fit11, col = "red", lwd = 2)

# contrast() - for qualitative predictors

Możemy zauważyć, że współczynnik 5 stopnia nie jest istotny dla modelu. Dodatkowo funkcja w prawym przedziale dziedziny zaczyna zbyt silnie dopasowywać się do danych (zwłaszcza na samym krańcu).

Kroswalidacja

Tym razem do wyznaczenia błędu naszego modelu posłużymy się metodą kroswalidacji. W tym celu załadujemy odpowiednią bibliotekę ułatwiającą dalszą pracę.

library(boot)

Najpierw wykorzystamy LOOCV czyli Leave One Out Cross Validation.

fit31 <- glm(cena~wielkosc, data = dane)
# LOOCV <- cv.glm(dane, fit31)
# save(LOOCV, file = "LOOCV.Rda")
LOOCV <- get(load("LOOCV.Rda"))
LOOCV$delta
[1] 354282 354282

LOOCV tworzy tyle modeli ile jest obserwacji w zestawie danych, za każdym razem pomijając jedeną z nich. Następnie określa błąd sprawdzając różnicę między pominiętą obserwacją a jej przewidywaniem wynikającym z powstałego modelu. Błąd ten określa wartość delta zwróconego obiektu. Pierwsza liczba jest po prostu błędem wyliczonym na podstawie całego danych, druga zaś koryguje ten błąd ze względu na fakt, iż zestaw danych uczących był mniejszy (w tym wypadku zawsze o jedną pozycję). W tym wypadku nie widać żadnej różnicy. Efekt ten będzie bardziej widoczny dla K krotnej kroswalidacji.

Metoda cv.glm jest bardzo powolna. Dlatego efekt jej działania zapisałem wcześniej do pliku, który teraz zostaje wczytany. Czas wykonywania tej operacji trwał kilka minut. Dla znacznego przyspieszenia działania tej funkcji posłużę się następującą formułą uwzględniającą wpływ i-tej obserwacji na dopasowanie do niej krzywej.

loocv.glm <-
  function(fit) {
    h <- lm.influence(fit)$h
    mean((residuals(fit)/(1-h))^2)
  }
loocv.glm(fit31)
[1] 354282

Powodem dla którego metoda cv.glm nie korzysta docelowo z tej formuły jest fakt, że nie funkcjonuje ona w wypadku regresji logistycznej.

Teraz sprawdzimy jakie błędy będą towarzyszyć wielomianom kolejnych stopni i czy opłaca się je zastosować.

cvBlad <- rep(0, 6)
stopien <- 1:6
for (d in stopien) {
  fit32 <- glm(cena~poly(wielkosc, d), data = dane)
  cvBlad[d] <- loocv.glm(fit32)
}
# stopien <- 1:6
# cvBlad <-
#   stopien %>%
#   sapply(
#     function(x) {
#       fit32 <- glm(cena~poly(wielkosc, x), data = dane)
#       loocv.glm(fit32)
#     }
#   )
plot(stopien, cvBlad, type = "b")

Na wykresie można zauważyć, że błąd przestaje maleć dla wielmianu 4 stopnia.

Teraz spróbujemy przeprowadzić K krotną kroswalidację. Standardowo za K przyjmuje się wartości 5 lub 10. W tym wypadku przyjmę tę większą.

cvBladK10 <-
  stopien %>%
  sapply(
    function(x) {
      cv.glm(dane, fit32, K = 10)$delta[1]
    }
  )
plot(stopien, cvBlad, type = "b")
lines(stopien, cvBladK10, type = "b", col = "red")

K krotna kroswalidacja jest bardziej stabilną metodą. W tym przypadku widać jak podpowiada nam, że już w zasadzie funkcja liniowa jest wystarczającym modelem.

Dobór modelu z wieloma predyktorami

Powyższy przykład pozwolił nam określić jaki stopień wielomianu jednego predyktora będzie odpowiedni dla naszego modelu. Tym razem chcemy jednak dobrać odpowiedni model z wieloma predyktorami. Jakie są nasze opcje?

Best Subset Regression

Metoda ta porównuje wszytkie możliwe modele regresji o wszystkich możliwych wielkościach (liczbie biorących udział w tworzeniu modelu predyktorów) w poszukiwaniu najlepszego modelu dla każdego z rozmiarów. W sumie wykonuje 2^p modeli, gdzie p to lizcba predyktorów (w naszym przypadku 2^11 czyli 2048) W osiągnięciu tego celu pomoże nam biblioteka leaps.

library(leaps)
fit41 <- regsubsets(cena~., dane, nvmax = 11)
sum41 <- summary(fit41)
sum41
Subset selection object
Call: regsubsets.formula(cena ~ ., dane, nvmax = 11)
39 Variables  (and intercept)
                                     Forced in Forced out
lokalizacjaBiałołęka                     FALSE      FALSE
lokalizacjaBielany                       FALSE      FALSE
lokalizacjaMokotów                       FALSE      FALSE
lokalizacjaOchota                        FALSE      FALSE
lokalizacjaPraga Północ                  FALSE      FALSE
lokalizacjaPraga Południe                FALSE      FALSE
lokalizacjaRembertów                     FALSE      FALSE
lokalizacjaŚródmieście                   FALSE      FALSE
lokalizacjaTargówek                      FALSE      FALSE
lokalizacjaUrsus                         FALSE      FALSE
lokalizacjaUrsynów                       FALSE      FALSE
lokalizacjaWawer                         FALSE      FALSE
lokalizacjaWesoła                        FALSE      FALSE
lokalizacjaWilanów                       FALSE      FALSE
lokalizacjaWłochy                        FALSE      FALSE
lokalizacjaWola                          FALSE      FALSE
lokalizacjaŻoliborz                      FALSE      FALSE
do_wynajecia_przezNie podano             FALSE      FALSE
do_wynajecia_przezWłaściciel             FALSE      FALSE
liczba_pokoi3 pokoje                     FALSE      FALSE
liczba_pokoi4 pokoje                     FALSE      FALSE
liczba_pokoi5 pokoi                      FALSE      FALSE
liczba_pokoi6 lub więcej pokoi           FALSE      FALSE
liczba_pokoiKawalerka lub garsoniera     FALSE      FALSE
liczba_pokoiNie podano                   FALSE      FALSE
rodzaj_nieruchomosciInne                 FALSE      FALSE
rodzaj_nieruchomosciMieszkanie           FALSE      FALSE
wielkosc                                 FALSE      FALSE
parkingGaraż                             FALSE      FALSE
parkingKryty                             FALSE      FALSE
parkingNie podano                        FALSE      FALSE
parkingUlica                             FALSE      FALSE
liczba_lazienek2 łazienki                FALSE      FALSE
liczba_lazienek3 łazienki                FALSE      FALSE
liczba_lazienek4 lub więcej łazienek     FALSE      FALSE
liczba_lazienekNie podano                FALSE      FALSE
palacyTak                                FALSE      FALSE
przyjazne_zwierzakomTak                  FALSE      FALSE
liczba_wyrazow                           FALSE      FALSE
1 subsets of each size up to 11
Selection Algorithm: exhaustive
          lokalizacjaBiałołęka lokalizacjaBielany lokalizacjaMokotów lokalizacjaOchota lokalizacjaPraga Północ
1  ( 1 )  " "                  " "                " "                " "               " "                    
2  ( 1 )  " "                  " "                " "                " "               " "                    
3  ( 1 )  " "                  " "                " "                " "               " "                    
4  ( 1 )  " "                  " "                "*"                " "               " "                    
5  ( 1 )  " "                  " "                "*"                " "               " "                    
6  ( 1 )  " "                  " "                "*"                " "               " "                    
7  ( 1 )  " "                  " "                "*"                " "               " "                    
8  ( 1 )  " "                  " "                "*"                " "               " "                    
9  ( 1 )  " "                  " "                "*"                "*"               " "                    
10  ( 1 ) " "                  " "                "*"                "*"               " "                    
11  ( 1 ) " "                  " "                "*"                "*"               " "                    
          lokalizacjaPraga Południe lokalizacjaRembertów lokalizacjaŚródmieście lokalizacjaTargówek
1  ( 1 )  " "                       " "                  " "                    " "                
2  ( 1 )  " "                       " "                  " "                    " "                
3  ( 1 )  " "                       " "                  "*"                    " "                
4  ( 1 )  " "                       " "                  "*"                    " "                
5  ( 1 )  " "                       " "                  "*"                    " "                
6  ( 1 )  " "                       " "                  "*"                    " "                
7  ( 1 )  " "                       " "                  "*"                    " "                
8  ( 1 )  " "                       " "                  "*"                    " "                
9  ( 1 )  " "                       " "                  "*"                    " "                
10  ( 1 ) " "                       " "                  "*"                    " "                
11  ( 1 ) " "                       " "                  "*"                    " "                
          lokalizacjaUrsus lokalizacjaUrsynów lokalizacjaWawer lokalizacjaWesoła lokalizacjaWilanów
1  ( 1 )  " "              " "                " "              " "               " "               
2  ( 1 )  " "              " "                " "              " "               " "               
3  ( 1 )  " "              " "                " "              " "               " "               
4  ( 1 )  " "              " "                " "              " "               " "               
5  ( 1 )  " "              " "                " "              " "               " "               
6  ( 1 )  " "              " "                " "              " "               " "               
7  ( 1 )  " "              " "                " "              " "               " "               
8  ( 1 )  " "              " "                " "              " "               " "               
9  ( 1 )  " "              " "                " "              " "               " "               
10  ( 1 ) " "              " "                " "              " "               " "               
11  ( 1 ) " "              " "                " "              " "               "*"               
          lokalizacjaWłochy lokalizacjaWola lokalizacjaŻoliborz do_wynajecia_przezNie podano
1  ( 1 )  " "               " "             " "                 " "                         
2  ( 1 )  " "               " "             " "                 " "                         
3  ( 1 )  " "               " "             " "                 " "                         
4  ( 1 )  " "               " "             " "                 " "                         
5  ( 1 )  " "               "*"             " "                 " "                         
6  ( 1 )  " "               "*"             " "                 " "                         
7  ( 1 )  " "               "*"             " "                 " "                         
8  ( 1 )  " "               "*"             " "                 " "                         
9  ( 1 )  " "               "*"             " "                 " "                         
10  ( 1 ) " "               "*"             "*"                 " "                         
11  ( 1 ) " "               "*"             "*"                 " "                         
          do_wynajecia_przezWłaściciel liczba_pokoi3 pokoje liczba_pokoi4 pokoje liczba_pokoi5 pokoi
1  ( 1 )  " "                          " "                  " "                  " "                
2  ( 1 )  "*"                          " "                  " "                  " "                
3  ( 1 )  "*"                          " "                  " "                  " "                
4  ( 1 )  "*"                          " "                  " "                  " "                
5  ( 1 )  "*"                          " "                  " "                  " "                
6  ( 1 )  "*"                          " "                  " "                  " "                
7  ( 1 )  "*"                          " "                  " "                  " "                
8  ( 1 )  "*"                          " "                  " "                  " "                
9  ( 1 )  "*"                          " "                  " "                  " "                
10  ( 1 ) "*"                          " "                  " "                  " "                
11  ( 1 ) "*"                          " "                  " "                  " "                
          liczba_pokoi6 lub więcej pokoi liczba_pokoiKawalerka lub garsoniera liczba_pokoiNie podano
1  ( 1 )  " "                            " "                                  " "                   
2  ( 1 )  " "                            " "                                  " "                   
3  ( 1 )  " "                            " "                                  " "                   
4  ( 1 )  " "                            " "                                  " "                   
5  ( 1 )  " "                            " "                                  " "                   
6  ( 1 )  " "                            " "                                  " "                   
7  ( 1 )  " "                            " "                                  " "                   
8  ( 1 )  " "                            " "                                  " "                   
9  ( 1 )  " "                            " "                                  " "                   
10  ( 1 ) " "                            " "                                  " "                   
11  ( 1 ) " "                            " "                                  " "                   
          rodzaj_nieruchomosciInne rodzaj_nieruchomosciMieszkanie wielkosc parkingGaraż parkingKryty
1  ( 1 )  " "                      " "                            "*"      " "          " "         
2  ( 1 )  " "                      " "                            "*"      " "          " "         
3  ( 1 )  " "                      " "                            "*"      " "          " "         
4  ( 1 )  " "                      " "                            "*"      " "          " "         
5  ( 1 )  " "                      " "                            "*"      " "          " "         
6  ( 1 )  " "                      " "                            "*"      "*"          " "         
7  ( 1 )  " "                      " "                            "*"      "*"          " "         
8  ( 1 )  " "                      " "                            "*"      "*"          " "         
9  ( 1 )  " "                      " "                            "*"      "*"          " "         
10  ( 1 ) " "                      " "                            "*"      "*"          " "         
11  ( 1 ) " "                      " "                            "*"      "*"          " "         
          parkingNie podano parkingUlica liczba_lazienek2 łazienki liczba_lazienek3 łazienki
1  ( 1 )  " "               " "          " "                       " "                      
2  ( 1 )  " "               " "          " "                       " "                      
3  ( 1 )  " "               " "          " "                       " "                      
4  ( 1 )  " "               " "          " "                       " "                      
5  ( 1 )  " "               " "          " "                       " "                      
6  ( 1 )  " "               " "          " "                       " "                      
7  ( 1 )  " "               " "          " "                       " "                      
8  ( 1 )  " "               " "          " "                       " "                      
9  ( 1 )  " "               " "          " "                       " "                      
10  ( 1 ) " "               " "          " "                       " "                      
11  ( 1 ) " "               " "          " "                       " "                      
          liczba_lazienek4 lub więcej łazienek liczba_lazienekNie podano palacyTak przyjazne_zwierzakomTak
1  ( 1 )  " "                                  " "                       " "       " "                    
2  ( 1 )  " "                                  " "                       " "       " "                    
3  ( 1 )  " "                                  " "                       " "       " "                    
4  ( 1 )  " "                                  " "                       " "       " "                    
5  ( 1 )  " "                                  " "                       " "       " "                    
6  ( 1 )  " "                                  " "                       " "       " "                    
7  ( 1 )  " "                                  "*"                       " "       " "                    
8  ( 1 )  " "                                  "*"                       " "       " "                    
9  ( 1 )  " "                                  "*"                       " "       " "                    
10  ( 1 ) " "                                  "*"                       " "       " "                    
11  ( 1 ) " "                                  "*"                       " "       " "                    
          liczba_wyrazow
1  ( 1 )  " "           
2  ( 1 )  " "           
3  ( 1 )  " "           
4  ( 1 )  " "           
5  ( 1 )  " "           
6  ( 1 )  " "           
7  ( 1 )  " "           
8  ( 1 )  "*"           
9  ( 1 )  "*"           
10  ( 1 ) "*"           
11  ( 1 ) "*"           
plot(sum41$cp, xlab = "Liczba predykatów", ylab = "Cp")
points(11, sum41$cp[11], pch = 20, col = "red")

plot(fit41, scale = "Cp")

coef(fit41, 11)
                 (Intercept)           lokalizacjaMokotów            lokalizacjaOchota 
                  450.545913                   476.235032                   349.124397 
      lokalizacjaŚródmieście           lokalizacjaWilanów              lokalizacjaWola 
                  649.739130                   310.623299                   423.324692 
         lokalizacjaŻoliborz do_wynajecia_przezWłaściciel                     wielkosc 
                  394.000726                  -222.266641                    32.679045 
                parkingGaraż    liczba_lazienekNie podano               liczba_wyrazow 
                  271.762260                   209.638385                     1.130164 

Niestety, w tym wypadku nie widać czym charakteryzuje się ta metoda. Nie zakłada ona zagnieżdżania podzbiorów predyktorów. Zagnieżdzanie polega na tym, że każdy kolejny większy model musi opierać się na czynnikach wchodzących w skład poprzedniego modelu. Tutaj mobłoby dojść do sytuacji, gdzie dla kilku pierwszych podzbiorów przy konkretnym czynniku występują gwiazdki, następnie zaś nie pojawiają się.

Cp jest miarą błędu predykcji. Jak widać w tym przypadku najmniejszy błąd występuje dla modelu o największej liczbie predyktorów. Wcale nie musiało tak być i z większą liczbą czynników błąd mógłby zacząć rosnąć.

Forward Stepwise Selection

Ta metodą jest jest “chciwa” w tym sensie, że zagnieżdza kolejne podzbiory czynników. Nie tworzy zatem każdej możliwej kombinacji predyktorów. Już raz dobrany czynnik wykorzystywany jest w następnym modelu. Przy dobieraniu kolejnego predyktora metoda ta dobiera najlepszą opcję porównując tylko p modeli. Zatem ogółem liczba operacji wynosi około (p^2)/2 (w naszym przypadku około 60, czyli tylko 3% w porównaniu z poprzednią metodą.

fit42 <- regsubsets(cena~., dane, nvmax = 11, method = "forward")
sum42 <- summary(fit42)
sum42
Subset selection object
Call: regsubsets.formula(cena ~ ., dane, nvmax = 11, method = "forward")
39 Variables  (and intercept)
                                     Forced in Forced out
lokalizacjaBiałołęka                     FALSE      FALSE
lokalizacjaBielany                       FALSE      FALSE
lokalizacjaMokotów                       FALSE      FALSE
lokalizacjaOchota                        FALSE      FALSE
lokalizacjaPraga Północ                  FALSE      FALSE
lokalizacjaPraga Południe                FALSE      FALSE
lokalizacjaRembertów                     FALSE      FALSE
lokalizacjaŚródmieście                   FALSE      FALSE
lokalizacjaTargówek                      FALSE      FALSE
lokalizacjaUrsus                         FALSE      FALSE
lokalizacjaUrsynów                       FALSE      FALSE
lokalizacjaWawer                         FALSE      FALSE
lokalizacjaWesoła                        FALSE      FALSE
lokalizacjaWilanów                       FALSE      FALSE
lokalizacjaWłochy                        FALSE      FALSE
lokalizacjaWola                          FALSE      FALSE
lokalizacjaŻoliborz                      FALSE      FALSE
do_wynajecia_przezNie podano             FALSE      FALSE
do_wynajecia_przezWłaściciel             FALSE      FALSE
liczba_pokoi3 pokoje                     FALSE      FALSE
liczba_pokoi4 pokoje                     FALSE      FALSE
liczba_pokoi5 pokoi                      FALSE      FALSE
liczba_pokoi6 lub więcej pokoi           FALSE      FALSE
liczba_pokoiKawalerka lub garsoniera     FALSE      FALSE
liczba_pokoiNie podano                   FALSE      FALSE
rodzaj_nieruchomosciInne                 FALSE      FALSE
rodzaj_nieruchomosciMieszkanie           FALSE      FALSE
wielkosc                                 FALSE      FALSE
parkingGaraż                             FALSE      FALSE
parkingKryty                             FALSE      FALSE
parkingNie podano                        FALSE      FALSE
parkingUlica                             FALSE      FALSE
liczba_lazienek2 łazienki                FALSE      FALSE
liczba_lazienek3 łazienki                FALSE      FALSE
liczba_lazienek4 lub więcej łazienek     FALSE      FALSE
liczba_lazienekNie podano                FALSE      FALSE
palacyTak                                FALSE      FALSE
przyjazne_zwierzakomTak                  FALSE      FALSE
liczba_wyrazow                           FALSE      FALSE
1 subsets of each size up to 11
Selection Algorithm: forward
          lokalizacjaBiałołęka lokalizacjaBielany lokalizacjaMokotów lokalizacjaOchota lokalizacjaPraga Północ
1  ( 1 )  " "                  " "                " "                " "               " "                    
2  ( 1 )  " "                  " "                " "                " "               " "                    
3  ( 1 )  " "                  " "                " "                " "               " "                    
4  ( 1 )  " "                  " "                "*"                " "               " "                    
5  ( 1 )  " "                  " "                "*"                " "               " "                    
6  ( 1 )  " "                  " "                "*"                " "               " "                    
7  ( 1 )  " "                  " "                "*"                " "               " "                    
8  ( 1 )  " "                  " "                "*"                " "               " "                    
9  ( 1 )  " "                  " "                "*"                "*"               " "                    
10  ( 1 ) " "                  " "                "*"                "*"               " "                    
11  ( 1 ) " "                  " "                "*"                "*"               " "                    
          lokalizacjaPraga Południe lokalizacjaRembertów lokalizacjaŚródmieście lokalizacjaTargówek
1  ( 1 )  " "                       " "                  " "                    " "                
2  ( 1 )  " "                       " "                  " "                    " "                
3  ( 1 )  " "                       " "                  "*"                    " "                
4  ( 1 )  " "                       " "                  "*"                    " "                
5  ( 1 )  " "                       " "                  "*"                    " "                
6  ( 1 )  " "                       " "                  "*"                    " "                
7  ( 1 )  " "                       " "                  "*"                    " "                
8  ( 1 )  " "                       " "                  "*"                    " "                
9  ( 1 )  " "                       " "                  "*"                    " "                
10  ( 1 ) " "                       " "                  "*"                    " "                
11  ( 1 ) " "                       " "                  "*"                    " "                
          lokalizacjaUrsus lokalizacjaUrsynów lokalizacjaWawer lokalizacjaWesoła lokalizacjaWilanów
1  ( 1 )  " "              " "                " "              " "               " "               
2  ( 1 )  " "              " "                " "              " "               " "               
3  ( 1 )  " "              " "                " "              " "               " "               
4  ( 1 )  " "              " "                " "              " "               " "               
5  ( 1 )  " "              " "                " "              " "               " "               
6  ( 1 )  " "              " "                " "              " "               " "               
7  ( 1 )  " "              " "                " "              " "               " "               
8  ( 1 )  " "              " "                " "              " "               " "               
9  ( 1 )  " "              " "                " "              " "               " "               
10  ( 1 ) " "              " "                " "              " "               " "               
11  ( 1 ) " "              " "                " "              " "               "*"               
          lokalizacjaWłochy lokalizacjaWola lokalizacjaŻoliborz do_wynajecia_przezNie podano
1  ( 1 )  " "               " "             " "                 " "                         
2  ( 1 )  " "               " "             " "                 " "                         
3  ( 1 )  " "               " "             " "                 " "                         
4  ( 1 )  " "               " "             " "                 " "                         
5  ( 1 )  " "               "*"             " "                 " "                         
6  ( 1 )  " "               "*"             " "                 " "                         
7  ( 1 )  " "               "*"             " "                 " "                         
8  ( 1 )  " "               "*"             " "                 " "                         
9  ( 1 )  " "               "*"             " "                 " "                         
10  ( 1 ) " "               "*"             "*"                 " "                         
11  ( 1 ) " "               "*"             "*"                 " "                         
          do_wynajecia_przezWłaściciel liczba_pokoi3 pokoje liczba_pokoi4 pokoje liczba_pokoi5 pokoi
1  ( 1 )  " "                          " "                  " "                  " "                
2  ( 1 )  "*"                          " "                  " "                  " "                
3  ( 1 )  "*"                          " "                  " "                  " "                
4  ( 1 )  "*"                          " "                  " "                  " "                
5  ( 1 )  "*"                          " "                  " "                  " "                
6  ( 1 )  "*"                          " "                  " "                  " "                
7  ( 1 )  "*"                          " "                  " "                  " "                
8  ( 1 )  "*"                          " "                  " "                  " "                
9  ( 1 )  "*"                          " "                  " "                  " "                
10  ( 1 ) "*"                          " "                  " "                  " "                
11  ( 1 ) "*"                          " "                  " "                  " "                
          liczba_pokoi6 lub więcej pokoi liczba_pokoiKawalerka lub garsoniera liczba_pokoiNie podano
1  ( 1 )  " "                            " "                                  " "                   
2  ( 1 )  " "                            " "                                  " "                   
3  ( 1 )  " "                            " "                                  " "                   
4  ( 1 )  " "                            " "                                  " "                   
5  ( 1 )  " "                            " "                                  " "                   
6  ( 1 )  " "                            " "                                  " "                   
7  ( 1 )  " "                            " "                                  " "                   
8  ( 1 )  " "                            " "                                  " "                   
9  ( 1 )  " "                            " "                                  " "                   
10  ( 1 ) " "                            " "                                  " "                   
11  ( 1 ) " "                            " "                                  " "                   
          rodzaj_nieruchomosciInne rodzaj_nieruchomosciMieszkanie wielkosc parkingGaraż parkingKryty
1  ( 1 )  " "                      " "                            "*"      " "          " "         
2  ( 1 )  " "                      " "                            "*"      " "          " "         
3  ( 1 )  " "                      " "                            "*"      " "          " "         
4  ( 1 )  " "                      " "                            "*"      " "          " "         
5  ( 1 )  " "                      " "                            "*"      " "          " "         
6  ( 1 )  " "                      " "                            "*"      "*"          " "         
7  ( 1 )  " "                      " "                            "*"      "*"          " "         
8  ( 1 )  " "                      " "                            "*"      "*"          " "         
9  ( 1 )  " "                      " "                            "*"      "*"          " "         
10  ( 1 ) " "                      " "                            "*"      "*"          " "         
11  ( 1 ) " "                      " "                            "*"      "*"          " "         
          parkingNie podano parkingUlica liczba_lazienek2 łazienki liczba_lazienek3 łazienki
1  ( 1 )  " "               " "          " "                       " "                      
2  ( 1 )  " "               " "          " "                       " "                      
3  ( 1 )  " "               " "          " "                       " "                      
4  ( 1 )  " "               " "          " "                       " "                      
5  ( 1 )  " "               " "          " "                       " "                      
6  ( 1 )  " "               " "          " "                       " "                      
7  ( 1 )  " "               " "          " "                       " "                      
8  ( 1 )  " "               " "          " "                       " "                      
9  ( 1 )  " "               " "          " "                       " "                      
10  ( 1 ) " "               " "          " "                       " "                      
11  ( 1 ) " "               " "          " "                       " "                      
          liczba_lazienek4 lub więcej łazienek liczba_lazienekNie podano palacyTak przyjazne_zwierzakomTak
1  ( 1 )  " "                                  " "                       " "       " "                    
2  ( 1 )  " "                                  " "                       " "       " "                    
3  ( 1 )  " "                                  " "                       " "       " "                    
4  ( 1 )  " "                                  " "                       " "       " "                    
5  ( 1 )  " "                                  " "                       " "       " "                    
6  ( 1 )  " "                                  " "                       " "       " "                    
7  ( 1 )  " "                                  "*"                       " "       " "                    
8  ( 1 )  " "                                  "*"                       " "       " "                    
9  ( 1 )  " "                                  "*"                       " "       " "                    
10  ( 1 ) " "                                  "*"                       " "       " "                    
11  ( 1 ) " "                                  "*"                       " "       " "                    
          liczba_wyrazow
1  ( 1 )  " "           
2  ( 1 )  " "           
3  ( 1 )  " "           
4  ( 1 )  " "           
5  ( 1 )  " "           
6  ( 1 )  " "           
7  ( 1 )  " "           
8  ( 1 )  "*"           
9  ( 1 )  "*"           
10  ( 1 ) "*"           
11  ( 1 ) "*"           
plot(sum42$cp, xlab = "Liczba predykatów", ylab = "Cp")
points(11, sum42$cp[11], pch = 20, col = "red")

plot(fit42, scale = "Cp")

coef(fit42, 11)
                 (Intercept)           lokalizacjaMokotów            lokalizacjaOchota 
                  450.545913                   476.235032                   349.124397 
      lokalizacjaŚródmieście           lokalizacjaWilanów              lokalizacjaWola 
                  649.739130                   310.623299                   423.324692 
         lokalizacjaŻoliborz do_wynajecia_przezWłaściciel                     wielkosc 
                  394.000726                  -222.266641                    32.679045 
                parkingGaraż    liczba_lazienekNie podano               liczba_wyrazow 
                  271.762260                   209.638385                     1.130164 

Backward Stepwise Selection

Metoda ta różni się od FSS tym, że zaczyna porównywać modele zbudowane na wszystkich predyktorach i z każdym kolejnym krokiem odejmuję jeden z nich (najmniej istotny) z zestawu. Minusem tej metody jest to, że nie można użyć jej na zestawie danych gdzie występuje więcej kolumn niż wierszy.

fit43 <- regsubsets(cena~., dane, nvmax = 11, method = "backward")
sum43 <- summary(fit43)
sum43
Subset selection object
Call: regsubsets.formula(cena ~ ., dane, nvmax = 11, method = "backward")
39 Variables  (and intercept)
                                     Forced in Forced out
lokalizacjaBiałołęka                     FALSE      FALSE
lokalizacjaBielany                       FALSE      FALSE
lokalizacjaMokotów                       FALSE      FALSE
lokalizacjaOchota                        FALSE      FALSE
lokalizacjaPraga Północ                  FALSE      FALSE
lokalizacjaPraga Południe                FALSE      FALSE
lokalizacjaRembertów                     FALSE      FALSE
lokalizacjaŚródmieście                   FALSE      FALSE
lokalizacjaTargówek                      FALSE      FALSE
lokalizacjaUrsus                         FALSE      FALSE
lokalizacjaUrsynów                       FALSE      FALSE
lokalizacjaWawer                         FALSE      FALSE
lokalizacjaWesoła                        FALSE      FALSE
lokalizacjaWilanów                       FALSE      FALSE
lokalizacjaWłochy                        FALSE      FALSE
lokalizacjaWola                          FALSE      FALSE
lokalizacjaŻoliborz                      FALSE      FALSE
do_wynajecia_przezNie podano             FALSE      FALSE
do_wynajecia_przezWłaściciel             FALSE      FALSE
liczba_pokoi3 pokoje                     FALSE      FALSE
liczba_pokoi4 pokoje                     FALSE      FALSE
liczba_pokoi5 pokoi                      FALSE      FALSE
liczba_pokoi6 lub więcej pokoi           FALSE      FALSE
liczba_pokoiKawalerka lub garsoniera     FALSE      FALSE
liczba_pokoiNie podano                   FALSE      FALSE
rodzaj_nieruchomosciInne                 FALSE      FALSE
rodzaj_nieruchomosciMieszkanie           FALSE      FALSE
wielkosc                                 FALSE      FALSE
parkingGaraż                             FALSE      FALSE
parkingKryty                             FALSE      FALSE
parkingNie podano                        FALSE      FALSE
parkingUlica                             FALSE      FALSE
liczba_lazienek2 łazienki                FALSE      FALSE
liczba_lazienek3 łazienki                FALSE      FALSE
liczba_lazienek4 lub więcej łazienek     FALSE      FALSE
liczba_lazienekNie podano                FALSE      FALSE
palacyTak                                FALSE      FALSE
przyjazne_zwierzakomTak                  FALSE      FALSE
liczba_wyrazow                           FALSE      FALSE
1 subsets of each size up to 11
Selection Algorithm: backward
          lokalizacjaBiałołęka lokalizacjaBielany lokalizacjaMokotów lokalizacjaOchota lokalizacjaPraga Północ
1  ( 1 )  " "                  " "                " "                " "               " "                    
2  ( 1 )  " "                  " "                " "                " "               " "                    
3  ( 1 )  " "                  " "                " "                " "               " "                    
4  ( 1 )  " "                  " "                "*"                " "               " "                    
5  ( 1 )  " "                  " "                "*"                " "               " "                    
6  ( 1 )  " "                  " "                "*"                " "               " "                    
7  ( 1 )  " "                  " "                "*"                " "               " "                    
8  ( 1 )  " "                  " "                "*"                " "               " "                    
9  ( 1 )  " "                  " "                "*"                "*"               " "                    
10  ( 1 ) " "                  " "                "*"                "*"               " "                    
11  ( 1 ) " "                  " "                "*"                "*"               " "                    
          lokalizacjaPraga Południe lokalizacjaRembertów lokalizacjaŚródmieście lokalizacjaTargówek
1  ( 1 )  " "                       " "                  " "                    " "                
2  ( 1 )  " "                       " "                  " "                    " "                
3  ( 1 )  " "                       " "                  "*"                    " "                
4  ( 1 )  " "                       " "                  "*"                    " "                
5  ( 1 )  " "                       " "                  "*"                    " "                
6  ( 1 )  " "                       " "                  "*"                    " "                
7  ( 1 )  " "                       " "                  "*"                    " "                
8  ( 1 )  " "                       " "                  "*"                    " "                
9  ( 1 )  " "                       " "                  "*"                    " "                
10  ( 1 ) " "                       " "                  "*"                    " "                
11  ( 1 ) " "                       " "                  "*"                    " "                
          lokalizacjaUrsus lokalizacjaUrsynów lokalizacjaWawer lokalizacjaWesoła lokalizacjaWilanów
1  ( 1 )  " "              " "                " "              " "               " "               
2  ( 1 )  " "              " "                " "              " "               " "               
3  ( 1 )  " "              " "                " "              " "               " "               
4  ( 1 )  " "              " "                " "              " "               " "               
5  ( 1 )  " "              " "                " "              " "               " "               
6  ( 1 )  " "              " "                " "              " "               " "               
7  ( 1 )  " "              " "                " "              " "               " "               
8  ( 1 )  " "              " "                " "              " "               " "               
9  ( 1 )  " "              " "                " "              " "               " "               
10  ( 1 ) " "              " "                " "              " "               " "               
11  ( 1 ) " "              " "                " "              " "               "*"               
          lokalizacjaWłochy lokalizacjaWola lokalizacjaŻoliborz do_wynajecia_przezNie podano
1  ( 1 )  " "               " "             " "                 " "                         
2  ( 1 )  " "               " "             " "                 " "                         
3  ( 1 )  " "               " "             " "                 " "                         
4  ( 1 )  " "               " "             " "                 " "                         
5  ( 1 )  " "               "*"             " "                 " "                         
6  ( 1 )  " "               "*"             " "                 " "                         
7  ( 1 )  " "               "*"             " "                 " "                         
8  ( 1 )  " "               "*"             " "                 " "                         
9  ( 1 )  " "               "*"             " "                 " "                         
10  ( 1 ) " "               "*"             "*"                 " "                         
11  ( 1 ) " "               "*"             "*"                 " "                         
          do_wynajecia_przezWłaściciel liczba_pokoi3 pokoje liczba_pokoi4 pokoje liczba_pokoi5 pokoi
1  ( 1 )  " "                          " "                  " "                  " "                
2  ( 1 )  "*"                          " "                  " "                  " "                
3  ( 1 )  "*"                          " "                  " "                  " "                
4  ( 1 )  "*"                          " "                  " "                  " "                
5  ( 1 )  "*"                          " "                  " "                  " "                
6  ( 1 )  "*"                          " "                  " "                  " "                
7  ( 1 )  "*"                          " "                  " "                  " "                
8  ( 1 )  "*"                          " "                  " "                  " "                
9  ( 1 )  "*"                          " "                  " "                  " "                
10  ( 1 ) "*"                          " "                  " "                  " "                
11  ( 1 ) "*"                          " "                  " "                  " "                
          liczba_pokoi6 lub więcej pokoi liczba_pokoiKawalerka lub garsoniera liczba_pokoiNie podano
1  ( 1 )  " "                            " "                                  " "                   
2  ( 1 )  " "                            " "                                  " "                   
3  ( 1 )  " "                            " "                                  " "                   
4  ( 1 )  " "                            " "                                  " "                   
5  ( 1 )  " "                            " "                                  " "                   
6  ( 1 )  " "                            " "                                  " "                   
7  ( 1 )  " "                            " "                                  " "                   
8  ( 1 )  " "                            " "                                  " "                   
9  ( 1 )  " "                            " "                                  " "                   
10  ( 1 ) " "                            " "                                  " "                   
11  ( 1 ) " "                            " "                                  " "                   
          rodzaj_nieruchomosciInne rodzaj_nieruchomosciMieszkanie wielkosc parkingGaraż parkingKryty
1  ( 1 )  " "                      " "                            "*"      " "          " "         
2  ( 1 )  " "                      " "                            "*"      " "          " "         
3  ( 1 )  " "                      " "                            "*"      " "          " "         
4  ( 1 )  " "                      " "                            "*"      " "          " "         
5  ( 1 )  " "                      " "                            "*"      " "          " "         
6  ( 1 )  " "                      " "                            "*"      "*"          " "         
7  ( 1 )  " "                      " "                            "*"      "*"          " "         
8  ( 1 )  " "                      " "                            "*"      "*"          " "         
9  ( 1 )  " "                      " "                            "*"      "*"          " "         
10  ( 1 ) " "                      " "                            "*"      "*"          " "         
11  ( 1 ) " "                      " "                            "*"      "*"          " "         
          parkingNie podano parkingUlica liczba_lazienek2 łazienki liczba_lazienek3 łazienki
1  ( 1 )  " "               " "          " "                       " "                      
2  ( 1 )  " "               " "          " "                       " "                      
3  ( 1 )  " "               " "          " "                       " "                      
4  ( 1 )  " "               " "          " "                       " "                      
5  ( 1 )  " "               " "          " "                       " "                      
6  ( 1 )  " "               " "          " "                       " "                      
7  ( 1 )  " "               " "          " "                       " "                      
8  ( 1 )  " "               " "          " "                       " "                      
9  ( 1 )  " "               " "          " "                       " "                      
10  ( 1 ) " "               " "          " "                       " "                      
11  ( 1 ) " "               " "          " "                       " "                      
          liczba_lazienek4 lub więcej łazienek liczba_lazienekNie podano palacyTak przyjazne_zwierzakomTak
1  ( 1 )  " "                                  " "                       " "       " "                    
2  ( 1 )  " "                                  " "                       " "       " "                    
3  ( 1 )  " "                                  " "                       " "       " "                    
4  ( 1 )  " "                                  " "                       " "       " "                    
5  ( 1 )  " "                                  " "                       " "       " "                    
6  ( 1 )  " "                                  " "                       " "       " "                    
7  ( 1 )  " "                                  "*"                       " "       " "                    
8  ( 1 )  " "                                  "*"                       " "       " "                    
9  ( 1 )  " "                                  "*"                       " "       " "                    
10  ( 1 ) " "                                  "*"                       " "       " "                    
11  ( 1 ) " "                                  "*"                       " "       " "                    
          liczba_wyrazow
1  ( 1 )  " "           
2  ( 1 )  " "           
3  ( 1 )  " "           
4  ( 1 )  " "           
5  ( 1 )  " "           
6  ( 1 )  " "           
7  ( 1 )  " "           
8  ( 1 )  "*"           
9  ( 1 )  "*"           
10  ( 1 ) "*"           
11  ( 1 ) "*"           
plot(sum43$cp, xlab = "Liczba predykatów", ylab = "Cp")
points(11, sum43$cp[11], pch = 20, col = "red")

plot(fit43, scale = "Cp")

coef(fit43, 11)
                 (Intercept)           lokalizacjaMokotów            lokalizacjaOchota 
                  450.545913                   476.235032                   349.124397 
      lokalizacjaŚródmieście           lokalizacjaWilanów              lokalizacjaWola 
                  649.739130                   310.623299                   423.324692 
         lokalizacjaŻoliborz do_wynajecia_przezWłaściciel                     wielkosc 
                  394.000726                  -222.266641                    32.679045 
                parkingGaraż    liczba_lazienekNie podano               liczba_wyrazow 
                  271.762260                   209.638385                     1.130164 

Walidacja

Tym razem podzielimy obserwacje na dwa zestawy - treningowy i walidacyjny.

set.seed(44)
trening44 <- sample(1:nrow(dane), 9000)
fit44 <- regsubsets(cena~., dane[trening44, ], nvmax = 11, method = "forward")
1  linear dependencies found
Reordering variables and trying again:

Teraz dokonamy predykcji na obserwacjach z zestawu testowego.

test44 <- model.matrix(cena~., dane[-trening44, ])
valBlad <-
  1:length(dane) %>%
  sapply(
    function(x) {
      coefi <- coef(fit44, id = x)
      pred <- test44[, names(coefi)]%*%coefi
      mean((dane$cena[-trening44]-pred)^2)
    }
  )
plot(
  sqrt(valBlad),
  ylim = c(400, 900),
  xlab = "Rozmiar modelu",
  ylab = "Średnia kwadratowa błędów",
  pch = 19,
  type = "b"
)
points(sqrt(fit44$rss[-1]/9000), col = "red", pch = 19, type = "b")
legend(
  "topright",
  legend = c("Trening", "Walidacja"),
  col = c("red", "black"),
  pch = 19
)

Na powyższym wykresie można zauważyć, że pomimo konsekwentnego spadku błędu treningowego, już przy rozmiarze modelu wynoszącym 3 błąd walidacji wypłaszcza się.

Na koniec operacje prowadzące do otrzymania takiego rezultatu zostaną ubrane w jedna funkcję.

# there was a problem with runtime: shiny, otherwise OK
predict.regsubsets <-
  function(obiekt, formula, dane, id, ...) {
    # form <- as.formula(obiekt$call[[2]]) # object of type 'symbol' is not subsettable
    # form <- as.formula(cena ~ .) works, but not satisfactory, what if formula is different?
    # form <- obiekt$call[[2]] # object of type 'symbol' is not subsettable
    # form <- obiekt$call %>% as.character() %>% .[2] %>% as.formula() # object 'expr' not found
    # form <- as.formula(obiekt$call %>% as.character() %>% .[2]) # object 'expr' not found
    mat <- model.matrix(formula, dane)
    # mat <- model.matrix(form, dane)
    coefi <- coef(obiekt, id = id)
    mat[, names(coefi)]%*%coefi
  }

Kroswalidacja

Tym razem dobierzemy model korzystając z 10 krotnej kroswalidacji.

set.seed(45)
folds <- sample(rep(1:10, length = nrow(dane)))
table(folds)
folds
   1    2    3    4    5    6    7    8    9   10 
1001 1001 1001 1001 1001 1000 1000 1000 1000 1000 
cvBledy <- matrix(NA, 10, 11)
for (k in 1:10) {
  form <- as.formula(cena~.)
  best.fit <- regsubsets(form, dane[folds!=k, ], nvmax = 11, method = "forward")
  for (i in 1:length(dane)) {
    pred <- predict.regsubsets(best.fit, form, dane[folds==k, ], id = i)
    cvBledy[k, i] <- mean((dane$cena[folds==k]-pred)^2)
  }
}
1  linear dependencies found
Reordering variables and trying again:
1  linear dependencies found
Reordering variables and trying again:
1  linear dependencies found
Reordering variables and trying again:
rmse.cv <- sqrt(apply(cvBledy, 2, mean))
plot(
  sqrt(valBlad),
  ylim = c(400, 900),
  xlab = "Rozmiar modelu",
  ylab = "Średnia kwadratowa błędów",
  pch = 19,
  type = "b"
)
points(sqrt(fit44$rss[-1]/9000), col = "red", pch = 19, type = "b")
points(rmse.cv, col = "blue", pch = 19, type = "b")
legend(
  "topright",
  legend = c("10 krotna Kroswalidacja", "Trening", "Walidacja"),
  col = c("blue", "red", "black"),
  pch = 19
)

Regularyzacja Tichonowa

W przeprowadzeniu Ridge Regression pomoże nam pakiet glmnet.

library(glmnet)
Loading required package: Matrix
Loading required package: foreach
foreach: simple, scalable parallel programming from Revolution Analytics
Use Revolution R for scalability, fault tolerance and more.
http://www.revolutionanalytics.com
Loaded glmnet 2.0-5

glmnet nie korzysta z języka formuły. Trzeba zatem podzielić dane na zestaw pedyktorów i odpowiedzi. Zanim przystąpimy do działania należy też znormalizować dane (np. sprowadzić je do przedziały (-3, 3) odejmując średnią od wartości i dzieląc przez odchylenie standardowe).

daneNorm <-
  dane %>%
  mutate(
    cena = (cena-mean(cena))/max(cena),
    wielkosc = (wielkosc-mean(wielkosc))/max(wielkosc),
    liczba_wyrazow = (liczba_wyrazow-mean(liczba_wyrazow))/max(liczba_wyrazow)
  )
x <- model.matrix(cena~.-1, dane)
y <- dane$cena
xn <- model.matrix(cena~.-1, daneNorm)
yn <- daneNorm$cena
fit45 <- glmnet(x, y, alpha = 0)
plot(fit45, xvar = "lambda", label = TRUE)

plot(fit45, xvar = "dev", label = TRUE)

cvRidge <- cv.glmnet(x, y, alpha = 0)
plot(cvRidge)

fit45 <- glmnet(xn, yn, alpha = 0)
plot(fit45, xvar = "lambda", label = TRUE)

plot(fit45, xvar = "dev", label = TRUE)

cvRidge <- cv.glmnet(xn, yn, alpha = 0)
plot(cvRidge)

Ridge Regression charakteryzuje się członem związanym z regularyzacją. Oznacza to, że dla dużej wartości współczynnika regularyzacji lambda będą musiały występować odpowiednio małe współczynniki Beta. Ten typ regresji opiera się więc na wszystkich predyktorach. Minimalizuje tylko ich współczynniki.

Na powyższych wykresach widać, że dla dużej lambdy współczynniki Beta zostają niemalże wyzerowane oraz że najmniejszy błąd otrzymujemy dla najmniejszej wartości lambda. Oznacza to, że udział każdego z czynników jest istotny dla budowanego modelu (posiada odpowiednio duży stojący przy nim współczynnik Beta). Potwierdza to więc poprzednie obserwacje, gdzie najskuteczniejszy model korzystał ze wszystkich 11 predyktorów. Fraction Deviance Explained jest jak R^2.

Lasso

Lasso czyli Least Absolute Shrinkage and Selection Operator różni się od poprzedniej metody elementem regulującym. Tym razem wartości Beta mogą zostać sprowadzone do zera, przez co część predyktorów może nie wziąć udziału w budowie modelu.

fit46 <- glmnet(x, y)
plot(fit46, xvar = "lambda", label = TRUE)

plot(fit46, xvar = "dev", label = TRUE)

cvLasso <- cv.glmnet(x, y)
plot(cvLasso)

fit47 <- glmnet(xn, yn)
plot(fit47, xvar = "lambda", label = TRUE)

plot(fit47, xvar = "dev", label = TRUE)

cvLassoN <- cv.glmnet(xn, yn)
plot(cvLassoN)

(coef(cvLassoN) %>% as.vector() != 0) %>% sum()
[1] 26

Na sam koniec spróbujmy jeszcze dobrać parametr lambda za pomocą metody walidacji (wcześniejszy set treningowy i set testowy).

lasso.tr <- glmnet(x[trening44, ], y[trening44])
lasso.tr

Call:  glmnet(x = x[trening44, ], y = y[trening44]) 

      Df    %Dev   Lambda
 [1,]  0 0.00000 547.8000
 [2,]  1 0.07787 499.1000
 [3,]  1 0.14250 454.8000
 [4,]  1 0.19620 414.4000
 [5,]  1 0.24080 377.6000
 [6,]  1 0.27780 344.0000
 [7,]  1 0.30850 313.5000
 [8,]  1 0.33400 285.6000
 [9,]  1 0.35510 260.2000
[10,]  1 0.37270 237.1000
[11,]  1 0.38730 216.1000
[12,]  1 0.39940 196.9000
[13,]  2 0.41040 179.4000
[14,]  2 0.42390 163.4000
[15,]  2 0.43500 148.9000
[16,]  3 0.44490 135.7000
[17,]  3 0.45790 123.6000
[18,]  3 0.46860 112.7000
[19,]  3 0.47760 102.6000
[20,]  6 0.48940  93.5300
[21,]  8 0.50410  85.2200
[22,] 10 0.52010  77.6500
[23,] 11 0.53390  70.7500
[24,] 11 0.54600  64.4600
[25,] 14 0.55700  58.7400
[26,] 14 0.56680  53.5200
[27,] 16 0.57560  48.7600
[28,] 17 0.58400  44.4300
[29,] 18 0.59120  40.4900
[30,] 18 0.59740  36.8900
[31,] 20 0.60260  33.6100
[32,] 20 0.60730  30.6300
[33,] 20 0.61120  27.9000
[34,] 21 0.61450  25.4300
[35,] 22 0.61730  23.1700
[36,] 22 0.62000  21.1100
[37,] 24 0.62220  19.2300
[38,] 24 0.62420  17.5300
[39,] 25 0.62590  15.9700
[40,] 25 0.62730  14.5500
[41,] 27 0.62850  13.2600
[42,] 27 0.62950  12.0800
[43,] 27 0.63030  11.0100
[44,] 27 0.63100  10.0300
[45,] 29 0.63170   9.1380
[46,] 30 0.63220   8.3260
[47,] 31 0.63270   7.5860
[48,] 31 0.63310   6.9120
[49,] 32 0.63340   6.2980
[50,] 32 0.63370   5.7390
[51,] 32 0.63390   5.2290
[52,] 33 0.63410   4.7640
[53,] 33 0.63430   4.3410
[54,] 34 0.63440   3.9550
[55,] 34 0.63460   3.6040
[56,] 34 0.63470   3.2840
[57,] 34 0.63470   2.9920
[58,] 34 0.63480   2.7260
[59,] 34 0.63490   2.4840
[60,] 34 0.63490   2.2630
[61,] 34 0.63500   2.0620
[62,] 35 0.63500   1.8790
[63,] 35 0.63500   1.7120
[64,] 35 0.63510   1.5600
[65,] 35 0.63510   1.4220
[66,] 35 0.63510   1.2950
[67,] 35 0.63510   1.1800
[68,] 35 0.63510   1.0750
[69,] 35 0.63520   0.9798
[70,] 35 0.63520   0.8927
[71,] 35 0.63520   0.8134
[72,] 35 0.63520   0.7412
[73,] 36 0.63520   0.6753
pred <- predict(lasso.tr, x[-trening44, ])
dim(pred)
[1] 1005   73
rmse <- sqrt(apply((y[-trening44]-pred)^2, 2, mean))
plot(log(lasso.tr$lambda), rmse, type = "b", xlab = "Log(lambda)")

lam.best <- lasso.tr$lambda[order(rmse)[1]]
lam.best
[1] 4.764327
lam.best %>% log()
[1] 1.561156
coef(lasso.tr, s = lam.best)
41 x 1 sparse Matrix of class "dgCMatrix"
                                                 1
(Intercept)                           1050.1065628
lokalizacjaBemowo                     -436.2768682
lokalizacjaBiałołęka                  -666.7034787
lokalizacjaBielany                    -253.9326917
lokalizacjaMokotów                     147.2142431
lokalizacjaOchota                       19.1241968
lokalizacjaPraga Północ                -43.9518359
lokalizacjaPraga Południe             -212.7163070
lokalizacjaRembertów                  -392.1580289
lokalizacjaŚródmieście                 325.6986109
lokalizacjaTargówek                   -518.4849000
lokalizacjaUrsus                      -519.0250234
lokalizacjaUrsynów                    -238.6313869
lokalizacjaWawer                      -693.1287036
lokalizacjaWesoła                    -1095.6705374
lokalizacjaWilanów                       .        
lokalizacjaWłochy                     -214.3443473
lokalizacjaWola                         79.1850594
lokalizacjaŻoliborz                     40.5228167
do_wynajecia_przezNie podano            -2.9852110
do_wynajecia_przezWłaściciel          -196.7439068
liczba_pokoi3 pokoje                   185.2279425
liczba_pokoi4 pokoje                   209.4840714
liczba_pokoi5 pokoi                    191.3150951
liczba_pokoi6 lub więcej pokoi           .        
liczba_pokoiKawalerka lub garsoniera  -169.3703593
liczba_pokoiNie podano                   .        
rodzaj_nieruchomosciInne              -156.4845950
rodzaj_nieruchomosciMieszkanie           .        
wielkosc                                27.3535489
parkingGaraż                           260.0328987
parkingKryty                            61.0748403
parkingNie podano                        .        
parkingUlica                           -36.8208370
liczba_lazienek2 łazienki               26.3565201
liczba_lazienek3 łazienki                .        
liczba_lazienek4 lub więcej łazienek  -167.5560629
liczba_lazienekNie podano              194.5708189
palacyTak                                9.9588596
przyjazne_zwierzakomTak                  .        
liczba_wyrazow                           0.9526509

Można zauważyć, że w tym wypadku otrzymaliśmy model, który nie jest najlepszym z możliwych, ale też nie jest gorszy niż najbardziej elastyczny proponowany przez kroswalidację.

LS0tCnRpdGxlOiAiQW5hbGl6YSBvZmVydCBkb3R5Y3rEhWN5Y2ggd3luYWptdSBuaWVydWNob21vxZtjaSB6IHBvcnRhbHUgZ3VtdHJlZS5wbCIKYXV0aG9yOiAiS3J6eXN6dG9mIFPFgm9tY3p5xYRza2kiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAotLS0KCmBgYHtyfQoKYGBgCgojIERsYWN6ZWdvIHRha2kgdGVtYXQ/CgpDaGNpYcWCZW0gem5hbGXFusSHIHRha2kgdGVtYXQsIGt0w7NyZWdvIGNob8SHIGN6xJnFm8SHIHd5a29uYW5pYSBixJlkemllIG1pYcWCYSB3eW1pYXIgcHJha3R5Y3pueS4gTmEgZ3J1cGllIFtNSV4yXShodHRwOi8vbWkyLm1pbmkucHcuZWR1LnBsKSBza8WCYWRhasSFY2VqIHNpxJkgZ8WCw7N3bmllIHplIHN0dWRlbnTDs3cgaSBhYnNvbHdlbnTDs3cgTWlOSSBQVyBpIE1JTSBVVyBmdW5rY2pvbnVqZSBwcm9qZWt0IFtDemFzRG9qYXpkdV0oaHR0cDovL2dpdGh1Yi5jb20vbWkyLXdhcnNhdy9DemFzRG9qYXpkdSkuIE1hIG9uIG5hIGNlbHUgZG9zdGFyY3plbmllIGFwbGlrYWNqaSB3eXN6dWt1asSFY2VqIHcgV2Fyc3phd2llIHBva29qw7N3IGRvIHd5bmFqxJljaWEgcG9kIGvEhXRlbSBrcnl0ZXJpdW0gY3phc3UgZG9qYXpkdSB6IG1pZXN6a2FuaWEgZG8gcHJhY3kuIFByemVnbMSFZGFqxIVjIGdvIHphdXdhxbx5xYJlbSwgxbxlIGN6xJnFm8SHIGRhbnljaCBwb2JpZXJhbnljaCB6IHBvcnRhbHUgW2d1bXRyZWUucGxdKGd1bXRyZWUucGwpIGplc3QgYsWCxJlkbmllIHphcGlzeXdhbnljaCAobWV0cmHFvCksIG5pZWt0w7NyZSB6YcWbIHPEhSB6dXBlxYJuaWUgcG9taWphbmUgKGN6eSBtb8W8bmEgcGFsacSHIGx1YiB0cnp5bWHEhyB6d2llcnrEmXRhLCBqYWthIGplc3QgcHJlZmVyb3dhbmEgcMWCZcSHKS4gUG9zdGFub3dpxYJlbSB1ZG9za29uYWxpxIcgc2NyYXBlciBmdW5rY2pvbnVqxIVjeSB3IHR5bSBwcm9qZWtjaWUsIGEgbmEgxZt3aWXFvG8gcG9icmFueWNoIGRhbnljaCBzcHLDs2Jvd2FjIHpidWRvd2HEhyBtb2RlbCBwcnpld2lkdWrEhWN5IGNlbnkgd3luYWptb3dhbnljaCBwb2tvaS4KCiMjIFVkb3Nrb25hbGVuaWUgc2NyYXBlcmEgLSB6ZG9ieWNpZSBkYW55Y2gKClogcG9tb2PEhSBwYWtpZXR1IGBydmVzdGAgb3JheiB3dHljemtpIFtTZWxlY3RvckdhZGdldF0oaHR0cDovL3NlbGVjdG9yZ2FkZ2V0LmNvbSkgZHppYcWCYWrEhWNlaiB3IHByemVnbMSFZGFyY2UgQ2hyb21pdW0gdWRhxYJvIG1pIHNpxJkgd3lkb2J5xIcgemUgc3Ryb24geiBvZmVydGFtaSBpbnRlcmVzdWrEhWNlIG1uaWUgZGFuZS4gS29kIHpuYWR1amUgc2nEmSB3IHJlcG96eXRvcml1bSBwcm9qZWt0dSBbQ3phc0RvamF6ZHVdKGh0dHA6Ly9naXRodWIuY29tL21pMi13YXJzYXcvQ3phc0RvamF6ZHUpLiBLb2xlam5lIHJlamVzdHJ5IHphcGlzeXdhbmUgc8SFIHcgYmF6aWUgZGFueWNoIFNRTGl0ZS4gUG9uaWV3YcW8IHdkcm/FvGVuaWUga29kdSBuYSBwcm9kdWtjasSZIHplIHd6Z2zEmWTDs3cgb3JnYW5pemFjeWpueWNoIHcgdGFraWNoIHByb2pla3RhY2ggbmllY28gdHJ3YSwgemRlY3lkb3dhxYJlbSBzacSZIG5hIHByemVyb2JpZW5pZSBnbyB0YWssIGFieSBkYW5lIHphcGlzeXdhbmUgYnnFgnkgZG8gcGxpa8OzdyAqLmNzdi4gUHJ6eXBhdHJ1asSFYyBzacSZIHBvYnJhbnltIG9mZXJ0b20gd2llZHppYcWCZW0sIMW8ZSBpY2ggbGljemJhIHByemV6IGN6YXMgcmVhbGl6YWNqaSBwcm9qZWt0dSBuaWUgdXJvxZtuaWUgZG8gZHXFvHljaCByb3ptaWFyw7N3LgoKIyBQcnp5Z290b3dhbmllIGRvIHByb2pla3R1CgpXIHJhbWFjaCBwcnp5Z290b3dhbmlhIHNpxJkgZG8gcmVhbGl6YWNqaSBwcm9qZWt0dSB1a2/FhGN6ecWCZW0gZHdhIGt1cnN5LgoKKiBNYWNoaW5lIExlYXJuaW5nIGF0IENvdXJzZXJhIGJ5IEFuZHJldyBOZwoqIFN0YXRpc3RpY2FsIExlYXJuaW5nIGF0IFN0YW5mb3JkIE9OTElORSBieSBUcmV2b3IgSGFzdGllIGFuZCBSb2JlcnQgVGlic2hpcmFuaQoKT3JheiB6YXBvem5hxYJlbSBzacSZIHogdGFraW1pIG5hcnrEmWR6aWFtaSBqYWsgQ3JvbnRhYiwgRmx1bWUsIEhhZG9vcCBIREZTIGkgU3BhcmsgKHBha2lldCBgc3BhcmtseXJgKS4KCiMgT2Jyw7Nia2EgZGFueWNoCgpgYGB7cn0KIyDFgWFkb3dhbmllIGJpYmxpb3RlawoKbGlicmFyeShkcGx5cikKbGlicmFyeShyZWFkcikKbGlicmFyeShzdHJpbmdpKQpgYGAKCk9mZXJ0YSBkb3R5Y3rEhWNhIHBva29qdSBkbyB3eW5hasSZY2lhIG5hIHBvcnRhbHUgW2d1bXRyZWUucGxdKGd1bXRyZWUucGwpIG1vxbxlIHphd2llcmHEhyBuYXN0xJlwdWrEhWNlIChwb3d0YXJ6YWxuZSkgb3BjamUgd3lib3J1OgoKMS4gTG9rYWxpemFjamEKICAqIE1pYXN0bywgV29qZXfDs2R6dHdvCiAgKiBEb2vFgmFkbnkgYWRyZXMKMi4gRG8gd3luYWrEmWNpYSBwcnplegogICogIi0tLS0tLS0tLSIKICAqIFfFgmHFm2NpY2llbAogICogQWdlbmNqYQozLiBXc3DDs8WCZHppZWxlbmllCiAgKiBXc3DDs8WCZHppZWxlbmllIHBva29qdQogICogV3Nww7PFgmR6aWVsZW5pZSBtaWVzemthbmlhL2RvbXUKNC4gRG9zdMSZcG55CiAgKiBEYXRhIHcgZm9ybWFjaWUgJWQvJW0vJVkKNS4gUm9kemFqIG5pZXJ1Y2hvbW/Fm2NpCiAgKiAiLS0tLS0tLS0tIgogICogTWllc3prYW5pZQogICogRG9tCiAgKiBJbm5lCjYuIFdpZWxrb8WbxIcgKG0yKQogICogTGljemJhIHR5cHUgSW50ZWdlcgo3LiBMaWN6YmEgcG9rb2kKICAqICItLS0tLS0tLS0iCiAgKiBLYXdhbGVya2EgbHViIGdhcnNvbmVyaWEKICAqIDIgcG9rb2plCiAgKiAzIHBva29qZQogICogNCBwb2tvamUKICAqIDUgcG9rb2kKICAqIDYgbHViIHdpxJljZWogcG9rb2kKOC4gUGFsxIVjeQogICogIi0tLS0tLS0tLSIKICAqIFRhawogICogTmllCjkuIFByenlqYXpuZSB6d2llcnpha29tCiAgKiAiLS0tLS0tLS0tIgogICogVGFrCiAgKiBOaWUKMTAuIFByZWZlcm93YW5hIHDFgmXEhwogICogIi0tLS0tLS0tLSIKICAqIE3EmcW8Y3p5em5hCiAgKiBLb2JpZXRhCiAgKiBCZXogcHJlZmVyZW5jamkKMTEuIENlbmEKICAqIExpY3piYSB0eXB1IEludGVnZXIKICAqIFByb3N6xJkgbyBrb250YWt0CiAgKiBXeW1pYW5hL3phbWlhbmEKClpiaWVyYW5lIHPEhSB0ZcW8IGRhbmUgZG90eWN6xIVjZSBkYXR5IGRvZGFuaWEgb2ZlcnR5LCBsaW5rIGRvIG9nxYJvc3plbmlhLCBvcGlzIGkgdHV0dcWCLiBUZSBqZWRuYWsgdHltIHJhemVtIG5pZSBixJlkxIUgbmFzIGludGVyZXNvd2HEhyB6ZSB3emdsxJlkdSBuYSBzd8OzaiB1bmlrYWxueSBjaGFyYWt0ZXIuCgpQcnp5anJ6eWpteSBzacSZIGltIG5pZWNvIGJsacW8ZWouCgpgYGB7cn0KIyDFgWFkb3dhbmllIGRhbnljaAoKZGFuZTEgPC0gcmVhZF9jc3YoIjIwMTYtMTAtMjZkZi5jc3YiKQpkYW5lMiA8LSByZWFkX2NzdigiMjAxNi0xMS0xN2RmLmNzdiIpCnBva29qZSA8LSByYmluZChkYW5lMSwgZGFuZTIpICU+JSBkaXN0aW5jdCgpCgpybShkYW5lMSwgZGFuZTIpCmBgYAoKYGBge3J9CiMgRGFuZSBwb2QgbHVwxIUgLSBvYnLDs2JrYQoKZGltKHBva29qZSkKc3RyKHBva29qZSkKYGBgCgpaIGRvc3TEmXBueWNoIGtvbHVtbiBwb3pvc3Rhd2lteSB0ZSBrdMOzcmUgc8SFIHVuaWthbG5lLiBEb2RhdGtvd28gc2tvcnp5c3RhbXkgamVkbmFrIHogb3Bpc8OzdyB3IGNlbHUgcG9saWN6ZW5pYSBpbG/Fm2NpIHd5c3TEmXB1amFjeWNoIHcgbmljaCBzxYLDs3cuCgpgYGB7cn0KcG9rb2plICU+JSBuYW1lcygpCm5hbWVzKHBva29qZSkgPC0KICBuYW1lcyhwb2tvamUpICU+JSBjaGFydHIoIsSFxJnDs8WCxIfFm8W6xbwiLCAiYWVvbGNzenoiLCAuKQpwb2tvamUgPC0KICBwb2tvamUgJT4lCiAgcmVuYW1lKHdpZWxrb3NjICA9IGB3aWVsa29zY18obTIpYCkgJT4lCiAgc2VsZWN0KC1jKGRhdGFfZG9kYW5pYSwgaHJlZiwgYWRyZXMsIHR5dHVsLCBkb3N0ZXBueSkpICU+JQogIG11dGF0ZSgKICAgIGxpY3piYV93eXJhem93ID0gc3RyaV9jb3VudF93b3JkcyhvcGlzKQogICkKcG9rb2plICU+JQogIHNlbGVjdCgtb3BpcykgJT4lCiAgbGFwcGx5KAogICAgZnVuY3Rpb24oeCkgewogICAgICB4ICU+JQogICAgICAgIHRhYmxlKHVzZU5BID0gImFsd2F5cyIpICU+JQogICAgICAgIHNvcnQoZGVjcmVhc2luZyA9IFRSVUUpICU+JQogICAgICAgIGhlYWQoMjApCiAgICB9CiAgKQpgYGAKCk5handpxJljZWogb2ZlcnQgcG9jaG9kemkgeiBLcmFrb3dhIGkgV2Fyc3phd3kgKHBvIG9rb8WCbyAyNTAwKS4gRG9kYXRrb3dvIHN0b2xpY2EgamFrbyBqZWR5bmUgbWlhc3RvIG1hIHJvenLDs8W8bmlvbmUgbG9rYWxpemFjamUgemUgd3pnbMSZZHUgbmEgZHppZWxuaWPEmS4gTmllIHRydWRubyBkb215xZtsacSHIHNpxJksIMW8ZSBuYWpkcm/FvHN6ZSBwb2tvamUgZG8gd3luYWrEmWNpYSBixJlkxIUgdyBuYWp3acSZa3N6eWNoIG1pYXN0YWNoLiBQb25pZXdhxbwgem5hY3puYSB3acSZa3N6b8WbxIcgb2ZlcnQgcG9jaG9kemkgeiBXYXJzemF3eSBpIEtyYWtvd2EsIG9ncmFuaWN6xJkgc2nEmSB3acSZYyBkbyB0eWNoIGR3w7NjaCBtaWFzdC4gTmEgZGFsc3p5bSBldGFwaWUgbW/FvG5hIHNwcsOzYm93YWMgcHJ6ZXdpZHppZcSHIGN6eSBvZmVydGEgamVzdCB6IGRhd25laiBjenkgeiBvYmVjbmVqIHN0b2xpY3kuCgpTcHJhd2TFum15IHJvemvFgmFkIGlsb8WbY2kgc8WCw7N3IHcgb3Bpc2FjaC4KCmBgYHtyfQpoaXN0KAogIHBva29qZSRsaWN6YmFfd3lyYXpvdywKICA1MCwKICBtYWluID0gIkhpc3RvZ3JhbSBsaWN6Ynkgd3lyYXrDs3cgdyBvcGlzaWUgb2ZlcnR5IiwKICB4bGFiID0gIkxpY3piYSB3eXJhesOzdyIsCiAgeWxhYiA9ICJMaWN6YmEgb2ZlcnQiCikKYGBgCgpOaWUgdHJ1ZG5vIGJ5xYJvIHNpxJkgZG9tecWbbGnEhywgxbxlIG5hamN6xJnFm2NpZWogd3lzdMSZcHVqxIVjZSBvcGlzeSBixJlkxIUga3LDs3RraWUuCgpVc3VuxJkgb2ZlcnR5IHphd2llcmFqxIVjZSB3IGNlbmllIGluZm9ybWFjasSZIGBQcm9zesSZIG8ga29udGFrdGAgb3JheiB0ZSB6IGBXeW1pYW5hL3phbWlhbmFgLiBUYWsgc2FtbyBwb3N0xIVwacSZIHogb2ZlcnRhbWksIGt0w7NyZSBuaWUgZG9zdGFyY3phasSFIGluZm9ybWFjamkgbyBwb3dpZXJ6Y2huaSB3eW5ham1vd2FuZWogcHJ6ZXN0cnplbmkuIERsYSB0YWtpY2gga29sdW1uIGphayBgZG9fd3luYWrEmWNpYV9wcnplemAsIGB3c3BvbGR6aWVsZW5pZWAgaSBgbGljemJhX3Bva29pYCB3IG1pZWpzY2UgYnJha3VqxIVjeWNoIHdhcnRvxZtjaSB3c3Rhd2nEmSBgIk5pZSBwb2Rhbm8iYCwgcG9uaWV3YcW8IGNpxJnFvGtvIHcgdHljaCBwcnpwYWRrYWNoIGRvc3p1a2HEhyBzacSZIGpha2llZ2/FmyBkb215xZtsbmVnbyB1c3Rhd2llbmlhLiBOYXRvbWlhc3QgdyBwcnp5cGFka3UgYHJvZHphal9uaWVydWNob21vc2NpYCBicmFrIHBvZGFuZWogd2FydG/Fm2NpIHByenlwaXN6xJkgZG8gaXN0bmllasSFY2VqIG9wY2ppIGBJbm5lYC4gS29sZWpubyBgcHJlZmVyb3dhbmFfcGxlY2AgcG9zaWFkYSB3YXJ0b8WbxIcgYEJleiBwcmVmZXJlbmNqaWAgaSB0byBvbmEgem9zdGFuaWUgcHJ6eXBpc2FuYSB3IHphbWlhbiB6YSBgTkFgLiBLaWVydWrEhWMgc2nEmSB6YXNhZMSFICJDbyBuaWUgamVzdCBwcmF3ZW0gemFicm9uaW9uZSwgamVzdCBkb3p3b2xvbmUiIHphxYJvxbzEmSwgxbxlIG5pZW9rcmXFm2xvbmUgd2FydG/Fm2NpIGRsYSBrb2x1bW4gYHBhbGFjeWAgb3JheiBgcHJ6eWphem5lX3p3aWVyemFrb21gIHByenlqbXVqxIUgd2FydG/Fm2NpIGBUYWtgLiBOYSBrb25pZWMgYGNlbmFgIHpvc3RhamUgcG96YmF3aW9uYSBpbmZvcm1hY2ppIG8gd2FsdWNpZSBpIHphbWllbmlvbmEgbmEgbGljemLEmSB0eXB1IEludGVnZXIsIGEga2xhc3kgb2Rwb3dpZWRuaWNoIHptaWVubnljaCB6b3N0YWrEhSB6YW1pZW5pb25lIG5hIGZha3RvcnkuCgpgYGB7cn0KcG9rb2plIDwtCiAgcG9rb2plICU+JQogIGZpbHRlcigKICAgIGdyZXBsKCgiV2Fyc3phd2F8S3Jha8OzdyIpLCBsb2thbGl6YWNqYSksCiAgICAhKGNlbmEgJWluJSBjKCJQcm9zesSZIG8ga29udGFrdCIsICJXeW1pYW5hL3phbWlhbmEiKSksCiAgICAhaXMubmEod2llbGtvc2MpCiAgKSAlPiUKICBtdXRhdGUoCiAgICBsb2thbGl6YWNqYSA9IGxva2FsaXphY2phICU+JQogICAgICBzdHJpX3JlcGxhY2VfZmlyc3RfcmVnZXgoIiwgV2Fyc3phd2EiLCAiIikgJT4lCiAgICAgIGFzLmZhY3RvcigpLAogICAgZG9fd3luYWplY2lhX3ByemV6ID0gZG9fd3luYWplY2lhX3ByemV6ICU+JQogICAgICBwbHlyOjptYXB2YWx1ZXMoTkEsICJOaWUgcG9kYW5vIikgJT4lCiAgICAgIGFzLmZhY3RvcigpLAogICAgd3Nwb2xkemllbGVuaWUgPSB3c3BvbGR6aWVsZW5pZSAlPiUKICAgICAgcGx5cjo6bWFwdmFsdWVzKE5BLCAiTmllIHBvZGFubyIpICU+JQogICAgICBhcy5mYWN0b3IoKSwKICAgIGxpY3piYV9wb2tvaSA9IGxpY3piYV9wb2tvaSAlPiUKICAgICAgcGx5cjo6bWFwdmFsdWVzKE5BLCAiTmllIHBvZGFubyIpICU+JQogICAgICBhcy5mYWN0b3IoKSwKICAgIHJvZHphal9uaWVydWNob21vc2NpID0gcm9kemFqX25pZXJ1Y2hvbW9zY2kgJT4lCiAgICAgIHBseXI6Om1hcHZhbHVlcyhOQSwgIklubmUiKSAlPiUKICAgICAgYXMuZmFjdG9yKCksCiAgICBwcmVmZXJvd2FuYV9wbGVjID0gcHJlZmVyb3dhbmFfcGxlYyAlPiUKICAgICAgcGx5cjo6bWFwdmFsdWVzKE5BLCAiQmV6IHByZWZlcmVuY2ppIikgJT4lCiAgICAgIGFzLmZhY3RvcigpLAogICAgcGFsYWN5ID0gcGFsYWN5ICU+JQogICAgICBwbHlyOjptYXB2YWx1ZXMoTkEsICJUYWsiKSAlPiUKICAgICAgYXMuZmFjdG9yKCksCiAgICBwcnp5amF6bmVfendpZXJ6YWtvbSA9IHByenlqYXpuZV96d2llcnpha29tICU+JQogICAgICBwbHlyOjptYXB2YWx1ZXMoTkEsICJUYWsiKSAlPiUKICAgICAgYXMuZmFjdG9yKCksCiAgICBjZW5hID0gc3RyaV9leHRyYWN0X2FsbF9yZWdleCgKICAgICAgY2VuYSwgIltbOmRpZ2l0Ol1dIgogICAgKSAlPiUKICAgICAgc3RyaV9qb2luX2xpc3QoKSAlPiUKICAgICAgYXMuaW50ZWdlcigpCiAgKQoKcG9rb2plICU+JSBzdW1tYXJ5KCkKYGBgCgpTdG9zdWrEhWMgemFzYWTEmSBvZ3Jhbmljem9uZWdvIHphdWZhbmlhICh3aWVsZSBvc8OzYiBtb2fFgm8gcG9teWxpxIcgc2nEmSBwb2RjemFzIHd5c3Rhd2lhbmlhIG9mZXJ0eSkgcHJ6eWpyenlqbXkgc2nEmSBibGnFvGVqIHdhcnRvxZtjaW9tIHByenlqbW93YW55bSBwcnpleiBjZW7EmSBvcmF6IHdpZWxrb8WbxIcuIFBvIG5pY2ggc3BvZHppZXdhbGliecWbbXkgc2nEmSBkb8WbxIcgc2lsbmVqIGtvcmVsYWNqaS4KCmBgYHtyfQpwbG90KGNlbmF+d2llbGtvc2MsIHBva29qZSkKYGBgCgpXeWtyZXMgemRlY3lkb3dhbmllIHBzdWrEhSBwb3p5Y2plIHogY2VuxIUgcG93ecW8ZWogNTAwMCB6xYJvdHljaCBvcmF6IHBvd2llcnpjaG5pxIUgcG93ecW8ZWogNjAwIG1ldHLDs3cga3dhZHJhdG93eWNoLiBQcnp5anJ6eWpteSBzaWUgYmxpxbxlaiB0eW0gb2ZlcnRvbS4KCmBgYHtyfQpwb2tvamUgJT4lCiAgZmlsdGVyKGNlbmEgPT0gODAwMCkgJT4lCiAgLiRvcGlzCmBgYAoKWiB0cmXFm2NpIG9mZXJ0eSB3eW5pa2EsIMW8ZSBjZW5hIHphIGplZGVuIHBva8OzaiBkbGEgb3NvYnkgdG8gODAwIHBsbi4gQXV0b3Igb2ZlcnR5IGRvcGlzYcWCIGplZGVuIHJ6xIVkIHdpZWxrb8WbY2kgZG8gY2VueS4gUHJ6eXBhdHJ6bXkgc2nEmSB0eW0gb2QgMzAwMCB3IGfDs3LEmS4KCmBgYHtyfQpwb2tvamUgJT4lCiAgZmlsdGVyKGJldHdlZW4oY2VuYSwgMzAwMCwgNDAwMCkpICU+JQogIC4kb3BpcwpgYGAKClBvd3nFvHN6ZSBwcnp5cGFka2kgb3Bpc3VqxIUgY2HFgmUgbWllc3prYW5pYSAobHViIGRvbXkpIGRvIHd5bmFqxJljaWEuIENlbmEgcG9kYW5hIGplc3QgemEgbWllc3prYW5pZS9kb20gKHN1bcSZIHBva29qw7N3KS4gVyBzZXJ3aXNpZSBbZ3VtdHJlZS5wbF0oZ3VtdHJlZS5wbCkgaXN0bmllamUgb3NvYm55IGR6aWHFgiBkbyB3eXN0YXdpYW5pYSB0YWtpY2ggb2ZlcnQgbyBuYXp3aWUgYG1pZXN6a2FuaWEgaSBkb215IGRvIHd5bmFqxJljaWFgLiBTcHJhd2TFum15IGNvIGR6aWVqZSBzacSZIHByenkgY2VuYWNoIG1pxJlkenkgMjAwMCBhIDMwMDAuCgpgYGB7cn0KcG9rb2plICU+JQogIGZpbHRlcihiZXR3ZWVuKGNlbmEsIDIwMDAsIDMwMDApKSAlPiUKICAuJG9waXMKYGBgCgpUeW0gcmF6ZW0gY2VuYSBjesSZxZtjaSBvZmVydCBmYWt0eWN6bmllIGRvdHljenkgamVkbmVnbyBwb2tvanUgZG8gd3luYWrEmWNpYSB3IGR3w7Nwb2tvam93eW0gbWllc3prYW5pdSB3IHBvYmxpxbx1IHN0YWNqaSBNZXRybyBSYXR1c3ogQXJzZW5hxYIuIE5pZXN0ZXR5IHBvZGFueSBtZXRyYcW8IGRvdHljenkgY2HFgmVnbyBtaWVzemthbmlhLgoKUHJ6eWpyenlqbXkgc2nEmSB0ZXJheiBza3Jham55bSB3aWVsa2/Fm2Npb20uCgpgYGB7cn0KcG9rb2plICU+JQogIGZpbHRlcih3aWVsa29zYyA+PSAxMDAwKSAlPiUKICAuJG9waXMKYGBgCgpDaWVrYXdlLCDFvGUgZHdpZSBuYWpiYXJkemllaiBza3Jham5lIG9mZXJ0eSBwb2Qgd3pnbMSZZGVtIHdpZWxrb8WbY2kgdG8ga29waWUgbmFqYmFyZHppZWogc2tyYW55Y2ggb2ZlcnQgcG9kIHd6Z2zEmWRlbSBjZW55LiBPY3p5d2nFm2NpZSB6YXdpZXJhasSFIG9uZSBixYLEhWQgaSB6b3N0YW7EhSB1c3VuacSZdGUuIFNwcmF3ZMW6bXkgY28geiBuaWVjbyBtbmllanN6eW1pLgoKYGBge3J9CnBva29qZSAlPiUKICBmaWx0ZXIoYmV0d2Vlbih3aWVsa29zYywgMjAwLCA2MDApKSAlPiUKICAuJG9waXMKYGBgCgpPZmVydHkgdGUgZG90eWN6xIUgaG90ZWxpIHByYWNvd25pY3p5Y2ggbHViIGNhxYJ5Y2ggZG9tb3N0dy4gVHltIHJhemVtIHRvIGNlbmEgcG9kYW5hIGplc3QgemEgcG9rw7NqLCBhIHdpZWxrb8WbxIcgb3Bpc3VqZSBtZXRyYcW8IGNhxYJlZ28gbWllc3pha25pYS9kb211LiBOaWVzdGV0eSBuaWUgbWEgxbxhZG5laiBrb25zZWt3ZW5jamkgdyBwb2Rhd2FuaXUgcHJ6ZXogb2ZlcmFudMOzdyBjZW55IGkgd2llbGtvxZtjaSBwb3dpZXJ6Y2huaSB3eW5ham11LiBSYXogcG9kYW55IGplc3QgbWV0cmHFvCBjYcWCZWdvIG1pZXN6a2FuaWEgeiBjZW7EhSB6YSBwb2vDs2ogaSBsaWN6YsSFIHBva29qw7N3LiBJbm55bSByYXplbSBwb2RhbnkgamVzdCBtZXRyYcW8IHBva29qdSB6IGNlbsSFIHphIHdzenlzdGtpZSBwb2tvamUgaSBwb2RhbsSFIGxpY3pixIUgcG9rb2rDs3cuIMW7ZWJ5IHVzdGFuZGFyeXpvd2HEhyB0ZSBvZmVydHkgdHJ6ZWJhYnkgcHJ6ZXByb3dhZHppxIcgd3lyYWZpbm93YW7EhSBhbmFsaXrEmSB0cmXFm2NpIG9waXN1LCBsdWIgd3Byb3dhZHppxIcgcG9wcmF3a2kgcsSZY3puaWUsIGN6eXRhasSFYyBrYcW8ZMSFIG9mZXJ0xJkgcG8ga29sZWkuIE5hIHBvdHJ6ZWJ5IHByb2pla3R1IG9ncmFuaWN6xJkgc2nEmSBkbyB1c3VuacSZY2lhIHRhayBza3Jham55Y2ggcHJ6eXBhZGvDs3csIGHFvCBuaWUgdXp5c2thbSB3IG1pYXLEmSByb3pzxIVkbmVqIGtvcmVsYWNqaSBtacSZZHp5IHR5bWkgZHdvbWEgd2FydG/Fm2NpYW1pLgoKUHJ6eWpyenlqbXkgc2llIGplc3pjemUgb2ZlcnRvbSBwb3NpYWRhasSFY3ltIHd5asSFdGtvd28gbmlza8SFIGNlbsSZIChwb25pxbxlaiAxMDAgUExOKSBpIGJhcmR6byBtYcWCeSBtZXRyYcW8ICgxMCBtXjIpLgoKYGBge3J9CnBva29qZSAlPiUKICBmaWx0ZXIoCiAgICBjZW5hIDw9IDEwMCwKICAgIHdpZWxrb3NjIDw9IDEwCiAgKSAlPiUKICAuJG9waXMKYGBgCgpXIHR5Y2ggb2ZlcnRhY2ggemRlY3lkb3dhbmllIG5pZXByYXdpZMWCb3dvIHBvZGFubyB3aWVsa2/Fm8SHLiA2IG9zb2Jvd3kgcG9rw7NqIHJhY3plaiBuaWUgbWEgNSBtXjIsIHphxZsgMy00IG9zb2Jvd3kgbmllIG1hIDEgbV4yLgoKQ28gc2nEmSBzdGFuaWUsIGdkeSBvZ3JhbmljesSZIHplc3RhdyBkYW55Y2ggemUgd3pnbMSZZHUgbmEgY2VuxJkgaSB3aWVsa2/Fm8SHIHByenlqbXVqxIVjIG5pZWNvIHfEmcW8c3plIC0gZWxpbWludWrEhWNlIHdhZGxpd2Ugb2ZlcnR5IC0gd2lkZcWCa2k/CgpgYGB7cn0Kc3ByYXdkemVuaWUwMSA8LQogIHBva29qZSAlPiUKICBzZWxlY3QoLW9waXMpICU+JQogIGZpbHRlcigKICAgIGJldHdlZW4oY2VuYSwgMTAwLCAxMDAwKSwKICAgIGJldHdlZW4od2llbGtvc2MsIDEwLCAzMCkKICApCgpzdW1tYXJ5KHNwcmF3ZHplbmllMDEpCnBsb3QoY2VuYX53aWVsa29zYywgc3ByYXdkemVuaWUwMSkKZml0MDEgPC0gbG0oY2VuYX53aWVsa29zYywgc3ByYXdkemVuaWUwMSkKYWJsaW5lKGZpdDAxLCBjb2wgPSAicmVkIikKYGBgCgpOaWVpbnR1aWN5am5pZSBjZW5hIHBva29qw7N3IGRvIHd5bmFqxJljaWEgc3BhZGEgd3JheiB6ZSB3enJvc3RlbSBtZXRyYcW8dS4gTW/FvGUgYnnEhyB0byBzcG93b2Rvd2FuZSBkYWxzesSFIG5pZWtvbnNla3dlbmNqxIUgd2Ugd3Byb3dhZHphbml1IGRhbnljaCBwcnpleiBvZmVyYW50w7N3LiBOYSB0eW0gZXRhcGllIHBvc3Rhbm93acWCZW0gcHJ6eWpyemXEhyBzacSZIGlubnltIGRhbnltIHogcG9ydGFsdSBbZ3VtdHJlZS5wbF0oZ3VtdHJlZS5wbCkuIFR5bSByYXplbSBvZmVydHkgZG90eWN6xIUgbWllc3prYcWEIGkgZG9tw7N3IGRvIHd5bmFqxJljaWEuIFBvbmlld2HFvCBvZmVydCBqZXN0IHcgc3VtaWUgbmllbWFsxbxlIDMwIHR5c2nEmWN5IHBvc3Rhbm93acWCZW0gb2dyYW5pY3p5xIcgc2nEmSBkbyBXYXJzemF3eSAoMTMgdHlzacSZY3kgb2ZlcnQpIGp1xbwgbmEgZXRhcGllIHNjcmFwb3dhbmlhIGRhbnljaC4KCkRsYSBtaWVzemthxYQgaSBkb23Ds3cgem1pZW5pxYJ5IHNpxJkgZHdhIGF0cnlidXR5IGRvIG5hZGFuaWEgb2ZlcnRvbS4gWm5pa27EmcWCeSBrb2x1bW55IGB3c3BvbGR6aWVsZW5pZWAgaSBgcHJlZmVyb3dhbmFfcGxlxIdgIHphxZsgcG9qYXdpxYJ5IHNpxJkgYHBhcmtpbmdgIG9yYXogYGxpY3piYV9sYXppZW5la2AuIFR5bSByYXplbSBjacSZxbxrbyBvIHBvbXnFgmvEmSBwcnp5IHdwaXN5d2FuaXUgY2VueSAtIG1pZXN6YWtuaWUgamVzdCB0cmFrdG93YW5lIGpha28gY2HFgm/Fm8SHIGkgbmllemFsZcW8bmllIG9kIGlsb8WbY2kgcG9rb2rDs3cgY2VuYSBwb3dpbm5hIGJ5xIcgcG9kYW5hIHphIGNhxYJvxZvEhy4gVG8gc2FtbyB0eWN6eSBzacSZIG1ldHJhxbx1LiBTcHJhd2TFum15IHdpxJljLCBjenkgYWJ5IG5hcGV3bm8gdGFrIGplc3QuIE5hanBpZXJ3IGplZG5hayB1cG9yesSFZGt1am15IGRhbmUuCgpgYGB7cn0KbWllc3prYW5pYSA8LSByZWFkX2NzdigiMjAxNi0xMS0yM19XYXJzemF3YV9kZi5jc3YiKQoKbWllc3prYW5pYSAlPiUgbmFtZXMoKQpuYW1lcyhtaWVzemthbmlhKSA8LQogIG5hbWVzKG1pZXN6a2FuaWEpICU+JSBjaGFydHIoIsSFxJnDs8WCxIfFm8W6xbwiLCAiYWVvbGNzenoiLCAuKQptaWVzemthbmlhIDwtCiAgbWllc3prYW5pYSAlPiUKICByZW5hbWUod2llbGtvc2MgID0gYHdpZWxrb3NjXyhtMilgKSAlPiUKICBzZWxlY3QoLWMoZGF0YV9kb2RhbmlhLCBocmVmLCBhZHJlcywgdHl0dWwsIGRvc3RlcG55KSkgJT4lCiAgbXV0YXRlKAogICAgbGljemJhX3d5cmF6b3cgPSBzdHJpX2NvdW50X3dvcmRzKG9waXMpCiAgKQptaWVzemthbmlhICU+JQogIHNlbGVjdCgtb3BpcykgJT4lCiAgbGFwcGx5KAogICAgZnVuY3Rpb24oeCkgewogICAgICB4ICU+JQogICAgICAgIHRhYmxlKHVzZU5BID0gImFsd2F5cyIpICU+JQogICAgICAgIHNvcnQoZGVjcmVhc2luZyA9IFRSVUUpICU+JQogICAgICAgIGhlYWQoMjApCiAgICB9CiAgKQoKbWllc3prYW5pYSA8LQogIG1pZXN6a2FuaWEgJT4lCiAgZmlsdGVyKAogICAgIShjZW5hICVpbiUgYygiUHJvc3rEmSBvIGtvbnRha3QiLCAiV3ltaWFuYS96YW1pYW5hIikpLAogICAgIWlzLm5hKHdpZWxrb3NjKQogICkgJT4lCiAgbXV0YXRlKAogICAgbG9rYWxpemFjamEgPSBsb2thbGl6YWNqYSAlPiUKICAgICAgc3RyaV9yZXBsYWNlX2ZpcnN0X3JlZ2V4KCIsIFdhcnN6YXdhIiwgIiIpICU+JQogICAgICBhcy5mYWN0b3IoKSwKICAgIGRvX3d5bmFqZWNpYV9wcnpleiA9IGRvX3d5bmFqZWNpYV9wcnpleiAlPiUKICAgICAgcGx5cjo6bWFwdmFsdWVzKE5BLCAiTmllIHBvZGFubyIpICU+JQogICAgICBhcy5mYWN0b3IoKSwKICAgIHBhcmtpbmcgPSBwYXJraW5nICU+JQogICAgICBwbHlyOjptYXB2YWx1ZXMoTkEsICJOaWUgcG9kYW5vIikgJT4lCiAgICAgIGFzLmZhY3RvcigpLAogICAgbGljemJhX3Bva29pID0gbGljemJhX3Bva29pICU+JQogICAgICBwbHlyOjptYXB2YWx1ZXMoTkEsICJOaWUgcG9kYW5vIikgJT4lCiAgICAgIGFzLmZhY3RvcigpLAogICAgcm9kemFqX25pZXJ1Y2hvbW9zY2kgPSByb2R6YWpfbmllcnVjaG9tb3NjaSAlPiUKICAgICAgcGx5cjo6bWFwdmFsdWVzKE5BLCAiSW5uZSIpICU+JQogICAgICBhcy5mYWN0b3IoKSwKICAgIGxpY3piYV9sYXppZW5layA9IGxpY3piYV9sYXppZW5layAlPiUKICAgICAgcGx5cjo6bWFwdmFsdWVzKE5BLCAiTmllIHBvZGFubyIpICU+JQogICAgICBhcy5mYWN0b3IoKSwKICAgIHBhbGFjeSA9IHBhbGFjeSAlPiUKICAgICAgcGx5cjo6bWFwdmFsdWVzKE5BLCAiVGFrIikgJT4lCiAgICAgIGFzLmZhY3RvcigpLAogICAgcHJ6eWphem5lX3p3aWVyemFrb20gPSBwcnp5amF6bmVfendpZXJ6YWtvbSAlPiUKICAgICAgcGx5cjo6bWFwdmFsdWVzKE5BLCAiVGFrIikgJT4lCiAgICAgIGFzLmZhY3RvcigpLAogICAgY2VuYSA9IHN0cmlfZXh0cmFjdF9hbGxfcmVnZXgoCiAgICAgIGNlbmEsICJbWzpkaWdpdDpdXSIKICAgICkgJT4lCiAgICAgIHN0cmlfam9pbl9saXN0KCkgJT4lCiAgICAgIGFzLmludGVnZXIoKQogICkKCm1pZXN6a2FuaWEgJT4lIHN1bW1hcnkoKQpgYGAKClBvbm93bmllIHNrcmFqbmUgd2FydG/Fm2NpIGNlbnkgaSB3aWVsa2/Fm2NpIHPEhSBwb2RlanJ6YW5lLiBQcnp5cGF0cnpteSBzacSZIGltIGJsacW8ZWouCgpgYGB7cn0KcGxvdChjZW5hfndpZWxrb3NjLCBtaWVzemthbmlhKQoKc3ByYXdkemVuaWUxMSA8LQogIG1pZXN6a2FuaWEgJT4lCiAgZmlsdGVyKAogICAgY2VuYSA8PSAxMDAwMDAsCiAgICB3aWVsa29zYyA8PSAxMDAwCiAgKQoKcGxvdChjZW5hfndpZWxrb3NjLCBzcHJhd2R6ZW5pZTExKQoKc3ByYXdkemVuaWUxMiA8LQogIG1pZXN6a2FuaWEgJT4lCiAgZmlsdGVyKAogICAgY2VuYSA8PSAxMDAwMCwKICAgIHdpZWxrb3NjIDw9IDIwMAogICkKCnBsb3QoY2VuYX53aWVsa29zYywgc3ByYXdkemVuaWUxMikKCnNwcmF3ZHplbmllMTMgPC0KICBtaWVzemthbmlhICU+JQogIGZpbHRlcigKICAgIGJldHdlZW4oY2VuYSwgMTAwMCwgNTAwMCksCiAgICBiZXR3ZWVuKHdpZWxrb3NjLCAyMCwgMTAwKQogICkKCnBsb3QoY2VuYX53aWVsa29zYywgc3ByYXdkemVuaWUxMykKCnNwcmF3ZHplbmllMTQgPC0KICBtaWVzemthbmlhICU+JQogIGZpbHRlcigKICAgIGJldHdlZW4oY2VuYSwgMTAwMCwgMTUwMDApLAogICAgYmV0d2Vlbih3aWVsa29zYywgMjAsIDQwMCkKICApCgpwbG90KGNlbmF+d2llbGtvc2MsIHNwcmF3ZHplbmllMTQpCgpzcHJhd2R6ZW5pZTE1IDwtCiAgbWllc3prYW5pYSAlPiUKICBmaWx0ZXIoCiAgICBiZXR3ZWVuKGNlbmEsIDEwMDAsIDEwMDAwKSwKICAgIGJldHdlZW4od2llbGtvc2MsIDIwLCAyMDApCiAgKQoKcGxvdChjZW5hfndpZWxrb3NjLCBzcHJhd2R6ZW5pZTE1KQoKc3ByYXdkemVuaWUxNiA8LQogIG1pZXN6a2FuaWEgJT4lCiAgZmlsdGVyKAogICAgYmV0d2VlbihjZW5hLCAxMDAwLCAxMDAwMCksCiAgICBiZXR3ZWVuKHdpZWxrb3NjLCAyMCwgMTAwKQogICkKCnBsb3QoY2VuYX53aWVsa29zYywgc3ByYXdkemVuaWUxNikKYGBgCgpUeW0gcmF6ZW0gZGFuZSB3eWdsxIVkYWrEhSB6bmFjem5pZSBiYXJkemllaiBvYmllY3VqxIVjby4gRGEgc2nEmSB6YXV3YcW8ecSHIGtvcmVsYWNqxJkgbWnEmWR6eSB3aWVsa2/Fm2NpxIUgbWllc3prYW5pYSBhIGNlbsSFLiBLYXdhbGVya2kgemFjenluYWrEhSBzacSZIG9kIG9rb8WCbyAyMCBtXjIuIER1xbxlIDMtNCBwb2tvam93ZSBtaWVzemthbmlhIGxpY3rEhSBzb2JpZSBkbyAxMDAgbV4yLiBTa3Jham5lIHdhcnRvxZtjaSB0ZWogc2thbGkgbWFqxIUgc3Rvc3VuZWsgMTo0LiBXIHRha2kgc2FtIHNwb3PDs2IgZG9icmFubyB3aWRlxYJraSBkbyBjZW4uIFPEhSB0byB0eXBvd2UgcHJ6ZWR6aWHFgnkgY2VuIHd5bmFqbXUgaSB3aWVsa2/Fm2NpIG1pZXN6a2HFhC4KCmBgYHtyfQpkYW5lIDwtCiAgc3ByYXdkemVuaWUxMyAlPiUKICBzZWxlY3QoLW9waXMpCnN1bW1hcnkoZGFuZSkKYGBgCgojIFJlZ3Jlc2phIGxpbmlvd2EKCiMjIEZ1bmtjamEgbGluaW93YQoKYGBge3J9CnBsb3QoY2VuYX53aWVsa29zYywgZGFuZSkKZml0MTEgPC0gbG0oY2VuYX53aWVsa29zYywgZGFuZSkKc3VtbWFyeShmaXQxMSkKYWJsaW5lKGZpdDExLCBjb2wgPSAicmVkIiwgbHdkID0gMikKYGBgCgpab2JhY3pteSBqYWsgY2VuYSB6YWxlxbx5IG9kIHBvem9zdGHFgnljaCBwcmVkeWt0b3LDs3cuCgpgYGB7cn0KZml0MTIgPC0KICBsbShjZW5hfi4sIGRhbmUpCnN1bW1hcnkoZml0MTIpCnBsb3QoZml0MTIpCmBgYAoKT2thenVqZSBzacSZLCDFvGUgcHJlZHlrdG9yeSBgcGFsYWN5YCBvcmF6IGBwcnp5amF6bmVfendpZXJ6YWtvbWAgbmllIHPEhSBpc3RvdG5lIHcgemJ1ZG93YW55bSBtb2RlbHUuIERsYSB1cHJvc3pjemVuaWEgZ28gdXN1bmllbXkgdGUgZHdpZSBrb2x1bW55LiBQb3pvc3RhxYJlIG5pZWlzdG90bmUgcGFyYW1ldHJ5IG5hbGXFvMSFIGRvIGdydXAgY3p5bm5pa8OzdywgeiBrdMOzcnljaCBjesSZxZvEhyBqZXN0IGlzdG90bmEsIGRsYXRlZ28gbmllIHpvc3RhbsSFIHVzdW5pxJl0ZSAobmFsZcW8YcWCb2J5IHd0ZWR5IHVzdW7EhcSHIHRlxbwgdGUgaXN0b3RuZSkuIE1vxbxuYSB6YW9ic2Vyd293YcSHLCDFvGUgc3R3b3J6b25hIG5vd2Egem1pZW5uYSBkb3R5Y3rEhWNhIGxpY3pieSBzxYLDs3cgdyBvZmVyY2llIGplc3QgYmFyZHpvIGlzdG90bnltIHByZWR5a3RvcmVtIHcgbmFzenltIG1vZGVsdS4KCmBgYHtyfQpmaXQxMyA8LQogIGxtKGNlbmF+Li1wYWxhY3ktcHJ6eWphem5lX3p3aWVyemFrb20sIGRhbmUpCnN1bW1hcnkoZml0MTMpCnBsb3QoZml0MTMpCmBgYAoKU3Byw7NidWpteSB3eWtvcnp5c3RhxIcgaW50ZXJha2NqxJkgbWllZHp5IGR3b21hIHByZWR5a3RvcmFtaSAtIGBsb2thbGl6YWNqYWAgaSBgd2llbGtvc2NgLgoKYGBge3J9CmZpdDE0IDwtCiAgbG0oY2VuYX4uK2xva2FsaXphY2phKndpZWxrb3NjLCBkYW5lKQpzdW1tYXJ5KGZpdDE0KQpwbG90KGZpdDE0KQpgYGAKCk9rYXp1amUgc2nEmSwgxbxlIHRhIHphbGXFvG5vxZvEhyBqZXN0IGlzdG90bmEgZGxhIG1vZGVsdS4gT3RyenltdWplbXkgd2nEmWtzemUgbyAxLjUlIEFkanVzdGVkIFJeMi4KCiMjIFdpZWxvbWlhbnkKClNwcsOzYnVqbXkgdGVyYXogZG9wYXNvd2HEhyBtb2RlbCBuaWVsaW5pb3d5LiBOYWpwaWVydyBvZCBzYW1laiB3aWVsa2/Fm2NpIG1pZXN6a2FuaWEuCgpgYGB7cn0KcGxvdChjZW5hfndpZWxrb3NjLCBkYW5lKQpmaXQyMSA8LQogIGxtKGNlbmF+d2llbGtvc2MrSSh3aWVsa29zY14yKSwgZGFuZSkKc3VtbWFyeShmaXQyMSkKcG9pbnRzKGRhbmUkd2llbGtvc2MsIGZpdHRlZChmaXQyMSksIGNvbCA9ICJibHVlIiwgcGNoID0gMjApCmFibGluZShmaXQxMSwgY29sID0gInJlZCIsIGx3ZCA9IDIpCmBgYAoKUG9kc3Vtb3dhbmllIGtvbXVuaWt1amUgbmFtLCDFvGUgd2llbGtvxZvEhyB3IGRydWdpZWogcG90xJlkemUgamVzdCBpc3RvdG55bSBjenlubmlraWVtLiBKZWRuYWvFvGUgd2lkYcSHIG5hIHBvd3nFvHN6eW0gd3lrcmVzaWUgaSBwbyB3YXJ0b8WbY2kgQWRqdXN0ZWQgUl4yIGphayBuaWV6bmFjem5pZSByw7PFvG5pxIUgc2nEmSBvZCBzaWViaWUga3J6eXdlIHByZWR5a2N5am5lLgoKWiBjaWVrYXdvxZtjaSBzcHJhd2TFum15IGphayBixJlkemllIHd5Z2zEhWRhxYIgbW9kZWwgZGxhIGplc3pjemUgd2nEmWtzemVnbyBzdG9wbmlhIHdpZWxvbWlhbnUuCgpgYGB7cn0KcGxvdChjZW5hfndpZWxrb3NjLCBkYW5lKQpmaXQyMiA8LQogIGxtKGNlbmF+cG9seSh3aWVsa29zYywgNiksIGRhbmUpCnN1bW1hcnkoZml0MjIpCnBvaW50cyhkYW5lJHdpZWxrb3NjLCBmaXR0ZWQoZml0MjIpLCBjb2wgPSAiZ3JlZW4iLCBwY2ggPSAyMCkKcG9pbnRzKGRhbmUkd2llbGtvc2MsIGZpdHRlZChmaXQyMSksIGNvbCA9ICJibHVlIiwgcGNoID0gMjApCmFibGluZShmaXQxMSwgY29sID0gInJlZCIsIGx3ZCA9IDIpCiMgY29udHJhc3QoKSAtIGZvciBxdWFsaXRhdGl2ZSBwcmVkaWN0b3JzCmBgYAoKTW/FvGVteSB6YXV3YcW8ecSHLCDFvGUgd3Nww7PFgmN6eW5uaWsgNSBzdG9wbmlhIG5pZSBqZXN0IGlzdG90bnkgZGxhIG1vZGVsdS4gRG9kYXRrb3dvIGZ1bmtjamEgdyBwcmF3eW0gcHJ6ZWR6aWFsZSBkemllZHppbnkgemFjenluYSB6Ynl0IHNpbG5pZSBkb3Bhc293eXdhxIcgc2nEmSBkbyBkYW55Y2ggKHp3xYJhc3pjemEgbmEgc2FteW0ga3JhxYRjdSkuCgojIyBLcm9zd2FsaWRhY2phCgpUeW0gcmF6ZW0gZG8gd3l6bmFjemVuaWEgYsWCxJlkdSBuYXN6ZWdvIG1vZGVsdSBwb3PFgnXFvHlteSBzacSZIG1ldG9kxIUga3Jvc3dhbGlkYWNqaS4gVyB0eW0gY2VsdSB6YcWCYWR1amVteSBvZHBvd2llZG5pxIUgYmlibGlvdGVrxJkgdcWCYXR3aWFqxIVjxIUgZGFsc3rEhSBwcmFjxJkuCgpgYGB7cn0KbGlicmFyeShib290KQpgYGAKCk5hanBpZXJ3IHd5a29yenlzdGFteSBgTE9PQ1ZgIGN6eWxpIGBMZWF2ZSBPbmUgT3V0IENyb3NzIFZhbGlkYXRpb25gLgoKYGBge3J9CmZpdDMxIDwtIGdsbShjZW5hfndpZWxrb3NjLCBkYXRhID0gZGFuZSkKIyBMT09DViA8LSBjdi5nbG0oZGFuZSwgZml0MzEpCiMgc2F2ZShMT09DViwgZmlsZSA9ICJMT09DVi5SZGEiKQpMT09DViA8LSBnZXQobG9hZCgiTE9PQ1YuUmRhIikpCkxPT0NWJGRlbHRhCmBgYAoKYExPT0NWYCB0d29yenkgdHlsZSBtb2RlbGkgaWxlIGplc3Qgb2JzZXJ3YWNqaSB3IHplc3Rhd2llIGRhbnljaCwgemEga2HFvGR5bSByYXplbSBwb21pamFqxIVjIGplZGVuxIUgeiBuaWNoLiBOYXN0xJlwbmllIG9rcmXFm2xhIGLFgsSFZCBzcHJhd2R6YWrEhWMgcsOzxbxuaWPEmSBtacSZZHp5IHBvbWluacSZdMSFIG9ic2Vyd2FjasSFIGEgamVqIHByemV3aWR5d2FuaWVtIHd5bmlrYWrEhWN5bSB6IHBvd3N0YcWCZWdvIG1vZGVsdS4gQsWCxIVkIHRlbiBva3JlxZtsYSB3YXJ0b8WbxIcgZGVsdGEgendyw7Njb25lZ28gb2JpZWt0dS4gUGllcndzemEgbGljemJhIGplc3QgcG8gcHJvc3R1IGLFgsSZZGVtIHd5bGljem9ueW0gbmEgcG9kc3Rhd2llIGNhxYJlZ28gZGFueWNoLCBkcnVnYSB6YcWbIGtvcnlndWplIHRlbiBixYLEhWQgemUgd3pnbMSZZHUgbmEgZmFrdCwgacW8IHplc3RhdyBkYW55Y2ggdWN6xIVjeWNoIGJ5xYIgbW5pZWpzenkgKHcgdHltIHd5cGFka3UgemF3c3plIG8gamVkbsSFIHBvenljasSZKS4gVyB0eW0gd3lwYWRrdSBuaWUgd2lkYcSHIMW8YWRuZWogcsOzxbxuaWN5LiBFZmVrdCB0ZW4gYsSZZHppZSBiYXJkemllaiB3aWRvY3pueSBkbGEgSyBrcm90bmVqIGtyb3N3YWxpZGFjamkuCgpNZXRvZGEgY3YuZ2xtIGplc3QgYmFyZHpvIHBvd29sbmEuIERsYXRlZ28gZWZla3QgamVqIGR6aWHFgmFuaWEgemFwaXNhxYJlbSB3Y3plxZtuaWVqIGRvIHBsaWt1LCBrdMOzcnkgdGVyYXogem9zdGFqZSB3Y3p5dGFueS4gQ3phcyB3eWtvbnl3YW5pYSB0ZWogb3BlcmFjamkgdHJ3YcWCIGtpbGthIG1pbnV0LiBEbGEgem5hY3puZWdvIHByenlzcGllc3plbmlhIGR6aWHFgmFuaWEgdGVqIGZ1bmtjamkgcG9zxYJ1xbzEmSBzacSZIG5hc3TEmXB1asSFY8SFIGZvcm11xYLEhSB1d3pnbMSZZG5pYWrEhWPEhSB3cMWCeXcgaS10ZWogb2JzZXJ3YWNqaSBuYSBkb3Bhc293YW5pZSBkbyBuaWVqIGtyenl3ZWouCgpgYGB7cn0KbG9vY3YuZ2xtIDwtCiAgZnVuY3Rpb24oZml0KSB7CiAgICBoIDwtIGxtLmluZmx1ZW5jZShmaXQpJGgKICAgIG1lYW4oKHJlc2lkdWFscyhmaXQpLygxLWgpKV4yKQogIH0KCmxvb2N2LmdsbShmaXQzMSkKYGBgCgpQb3dvZGVtIGRsYSBrdMOzcmVnbyBtZXRvZGEgY3YuZ2xtIG5pZSBrb3J6eXN0YSBkb2NlbG93byB6IHRlaiBmb3JtdcWCeSBqZXN0IGZha3QsIMW8ZSBuaWUgZnVua2Nqb251amUgb25hIHcgd3lwYWRrdSByZWdyZXNqaSBsb2dpc3R5Y3puZWouCgpUZXJheiBzcHJhd2R6aW15IGpha2llIGLFgsSZZHkgYsSZZMSFIHRvd2FyenlzennEhyB3aWVsb21pYW5vbSBrb2xlam55Y2ggc3RvcG5pIGkgY3p5IG9wxYJhY2Egc2nEmSBqZSB6YXN0b3Nvd2HEhy4KCmBgYHtyfQpjdkJsYWQgPC0gcmVwKDAsIDYpCnN0b3BpZW4gPC0gMTo2CmZvciAoZCBpbiBzdG9waWVuKSB7CiAgZml0MzIgPC0gZ2xtKGNlbmF+cG9seSh3aWVsa29zYywgZCksIGRhdGEgPSBkYW5lKQogIGN2QmxhZFtkXSA8LSBsb29jdi5nbG0oZml0MzIpCn0KCiMgc3RvcGllbiA8LSAxOjYKIyBjdkJsYWQgPC0KIyAgIHN0b3BpZW4gJT4lCiMgICBzYXBwbHkoCiMgICAgIGZ1bmN0aW9uKHgpIHsKIyAgICAgICBmaXQzMiA8LSBnbG0oY2VuYX5wb2x5KHdpZWxrb3NjLCB4KSwgZGF0YSA9IGRhbmUpCiMgICAgICAgbG9vY3YuZ2xtKGZpdDMyKQojICAgICB9CiMgICApCgpwbG90KHN0b3BpZW4sIGN2QmxhZCwgdHlwZSA9ICJiIikKYGBgCgpOYSB3eWtyZXNpZSBtb8W8bmEgemF1d2HFvHnEhywgxbxlIGLFgsSFZCBwcnplc3RhamUgbWFsZcSHIGRsYSB3aWVsbWlhbnUgNCBzdG9wbmlhLgoKVGVyYXogc3Byw7NidWplbXkgcHJ6ZXByb3dhZHppxIcgSyBrcm90bsSFIGtyb3N3YWxpZGFjasSZLiBTdGFuZGFyZG93byB6YSBLIHByenlqbXVqZSBzacSZIHdhcnRvxZtjaSA1IGx1YiAxMC4gVyB0eW0gd3lwYWRrdSBwcnp5am3EmSB0xJkgd2nEmWtzesSFLgoKYGBge3J9CmN2QmxhZEsxMCA8LQogIHN0b3BpZW4gJT4lCiAgc2FwcGx5KAogICAgZnVuY3Rpb24oeCkgewogICAgICBjdi5nbG0oZGFuZSwgZml0MzIsIEsgPSAxMCkkZGVsdGFbMV0KICAgIH0KICApCgpwbG90KHN0b3BpZW4sIGN2QmxhZCwgdHlwZSA9ICJiIikKbGluZXMoc3RvcGllbiwgY3ZCbGFkSzEwLCB0eXBlID0gImIiLCBjb2wgPSAicmVkIikKYGBgCgpLIGtyb3RuYSBrcm9zd2FsaWRhY2phIGplc3QgYmFyZHppZWogc3RhYmlsbsSFIG1ldG9kxIUuIFcgdHltIHByenlwYWRrdSB3aWRhxIcgamFrIHBvZHBvd2lhZGEgbmFtLCDFvGUganXFvCB3IHphc2FkemllIGZ1bmtjamEgbGluaW93YSBqZXN0IHd5c3RhcmN6YWrEhWN5bSBtb2RlbGVtLgoKIyMgRG9iw7NyIG1vZGVsdSB6IHdpZWxvbWEgcHJlZHlrdG9yYW1pCgpQb3d5xbxzenkgcHJ6eWvFgmFkIHBvendvbGnFgiBuYW0gb2tyZcWbbGnEhyBqYWtpIHN0b3BpZcWEIHdpZWxvbWlhbnUgamVkbmVnbyBwcmVkeWt0b3JhIGLEmWR6aWUgb2Rwb3dpZWRuaSBkbGEgbmFzemVnbyBtb2RlbHUuIFR5bSByYXplbSBjaGNlbXkgamVkbmFrIGRvYnJhxIcgb2Rwb3dpZWRuaSBtb2RlbCB6IHdpZWxvbWEgcHJlZHlrdG9yYW1pLiBKYWtpZSBzxIUgbmFzemUgb3BjamU/CgojIyMgQmVzdCBTdWJzZXQgUmVncmVzc2lvbgoKTWV0b2RhIHRhIHBvcsOzd251amUgd3N6eXRraWUgbW/FvGxpd2UgbW9kZWxlIHJlZ3Jlc2ppIG8gd3N6eXN0a2ljaCBtb8W8bGl3eWNoIHdpZWxrb8WbY2lhY2ggKGxpY3piaWUgYmlvcsSFY3ljaCB1ZHppYcWCIHcgdHdvcnplbml1IG1vZGVsdSBwcmVkeWt0b3LDs3cpIHcgcG9zenVraXdhbml1IG5hamxlcHN6ZWdvIG1vZGVsdSBkbGEga2HFvGRlZ28geiByb3ptaWFyw7N3LiBXIHN1bWllIHd5a29udWplIDJecCBtb2RlbGksIGdkemllIHAgdG8gbGl6Y2JhIHByZWR5a3RvcsOzdyAodyBuYXN6eW0gcHJ6eXBhZGt1IDJeMTEgY3p5bGkgMjA0OCkgVyBvc2nEhWduacSZY2l1IHRlZ28gY2VsdSBwb21vxbxlIG5hbSBiaWJsaW90ZWthIGBsZWFwc2AuCgpgYGB7cn0KbGlicmFyeShsZWFwcykKYGBgCgpgYGB7cn0KZml0NDEgPC0gcmVnc3Vic2V0cyhjZW5hfi4sIGRhbmUsIG52bWF4ID0gMTEpCnN1bTQxIDwtIHN1bW1hcnkoZml0NDEpCnN1bTQxCnBsb3Qoc3VtNDEkY3AsIHhsYWIgPSAiTGljemJhIHByZWR5a3RvcsOzdyIsIHlsYWIgPSAiQ3AiKQpwb2ludHMoMTEsIHN1bTQxJGNwWzExXSwgcGNoID0gMjAsIGNvbCA9ICJyZWQiKQpwbG90KGZpdDQxLCBzY2FsZSA9ICJDcCIpCmNvZWYoZml0NDEsIDExKQpgYGAKCk5pZXN0ZXR5LCB3IHR5bSB3eXBhZGt1IG5pZSB3aWRhxIcgY3p5bSBjaGFyYWt0ZXJ5enVqZSBzacSZIHRhIG1ldG9kYS4gTmllIHpha8WCYWRhIG9uYSB6YWduaWXFvGTFvGFuaWEgcG9kemJpb3LDs3cgcHJlZHlrdG9yw7N3LiBaYWduaWXFvGR6YW5pZSBwb2xlZ2EgbmEgdHltLCDFvGUga2HFvGR5IGtvbGVqbnkgd2nEmWtzenkgbW9kZWwgbXVzaSBvcGllcmHEhyBzacSZIG5hIGN6eW5uaWthY2ggd2Nob2R6xIVjeWNoIHcgc2vFgmFkIHBvcHJ6ZWRuaWVnbyBtb2RlbHUuIFR1dGFqIG1vYsWCb2J5IGRvasWbxIcgZG8gc3l0dWFjamksIGdkemllIGRsYSBraWxrdSBwaWVyd3N6eWNoIHBvZHpiaW9yw7N3IHByenkga29ua3JldG55bSBjenlubmlrdSB3eXN0xJlwdWrEhSBnd2lhemRraSwgbmFzdMSZcG5pZSB6YcWbIG5pZSBwb2phd2lhasSFIHNpxJkuCgpDcCBqZXN0IG1pYXLEhSBixYLEmWR1IHByZWR5a2NqaS4gSmFrIHdpZGHEhyB3IHR5bSBwcnp5cGFka3UgbmFqbW5pZWpzenkgYsWCxIVkIHd5c3TEmXB1amUgZGxhIG1vZGVsdSBvIG5handpxJlrc3plaiBsaWN6YmllIHByZWR5a3RvcsOzdy4gV2NhbGUgbmllIG11c2lhxYJvIHRhayBiecSHIGkgeiB3acSZa3N6xIUgbGljemLEhSBjenlubmlrw7N3IGLFgsSFZCBtw7NnxYJieSB6YWN6xIXEhyByb3NuxIXEhy4KCiMjIyBGb3J3YXJkIFN0ZXB3aXNlIFNlbGVjdGlvbgoKVGEgbWV0b2TEhSBqZXN0IGplc3QgImNoY2l3YSIgdyB0eW0gc2Vuc2llLCDFvGUgemFnbmllxbxkemEga29sZWpuZSBwb2R6YmlvcnkgY3p5bm5pa8Ozdy4gTmllIHR3b3J6eSB6YXRlbSBrYcW8ZGVqIG1vxbxsaXdlaiBrb21iaW5hY2ppIHByZWR5a3RvcsOzdy4gSnXFvCByYXogZG9icmFueSBjenlubmlrIHd5a29yenlzdHl3YW55IGplc3QgdyBuYXN0xJlwbnltIG1vZGVsdS4gUHJ6eSBkb2JpZXJhbml1IGtvbGVqbmVnbyBwcmVkeWt0b3JhIG1ldG9kYSB0YSBkb2JpZXJhIG5hamxlcHN6xIUgb3BjasSZIHBvcsOzd251asSFYyB0eWxrbyBwIG1vZGVsaS4gWmF0ZW0gb2fDs8WCZW0gbGljemJhIG9wZXJhY2ppIHd5bm9zaSBva2/Fgm8gKHBeMikvMiAodyBuYXN6eW0gcHJ6eXBhZGt1IG9rb8WCbyA2MCwgY3p5bGkgdHlsa28gMyUgdyBwb3LDs3duYW5pdSB6IHBvcHJ6ZWRuacSFIG1ldG9kxIUuCgpgYGB7cn0KZml0NDIgPC0gcmVnc3Vic2V0cyhjZW5hfi4sIGRhbmUsIG52bWF4ID0gMTEsIG1ldGhvZCA9ICJmb3J3YXJkIikKc3VtNDIgPC0gc3VtbWFyeShmaXQ0MikKc3VtNDIKcGxvdChzdW00MiRjcCwgeGxhYiA9ICJMaWN6YmEgcHJlZHlrdG9yw7N3IiwgeWxhYiA9ICJDcCIpCnBvaW50cygxMSwgc3VtNDIkY3BbMTFdLCBwY2ggPSAyMCwgY29sID0gInJlZCIpCnBsb3QoZml0NDIsIHNjYWxlID0gIkNwIikKY29lZihmaXQ0MiwgMTEpCmBgYAoKIyMjIEJhY2t3YXJkIFN0ZXB3aXNlIFNlbGVjdGlvbgoKTWV0b2RhIHRhIHLDs8W8bmkgc2nEmSBvZCBGU1MgdHltLCDFvGUgemFjenluYSBwb3LDs3dueXdhxIcgbW9kZWxlIHpidWRvd2FuZSBuYSB3c3p5c3RraWNoIHByZWR5a3RvcmFjaCBpIHoga2HFvGR5bSBrb2xlam55bSBrcm9raWVtIG9kZWptdWrEmSBqZWRlbiB6IG5pY2ggKG5ham1uaWVqIGlzdG90bnkpIHogemVzdGF3dS4gTWludXNlbSB0ZWogbWV0b2R5IGplc3QgdG8sIMW8ZSBuaWUgbW/FvG5hIHXFvHnEhyBqZWogbmEgemVzdGF3aWUgZGFueWNoIGdkemllIHd5c3TEmXB1amUgd2nEmWNlaiBrb2x1bW4gbmnFvCB3aWVyc3p5LgoKYGBge3J9CmZpdDQzIDwtIHJlZ3N1YnNldHMoY2VuYX4uLCBkYW5lLCBudm1heCA9IDExLCBtZXRob2QgPSAiYmFja3dhcmQiKQpzdW00MyA8LSBzdW1tYXJ5KGZpdDQzKQpzdW00MwpwbG90KHN1bTQzJGNwLCB4bGFiID0gIkxpY3piYSBwcmVkeWt0b3LDs3ciLCB5bGFiID0gIkNwIikKcG9pbnRzKDExLCBzdW00MyRjcFsxMV0sIHBjaCA9IDIwLCBjb2wgPSAicmVkIikKcGxvdChmaXQ0Mywgc2NhbGUgPSAiQ3AiKQpjb2VmKGZpdDQzLCAxMSkKYGBgCgojIyMgV2FsaWRhY2phCgpUeW0gcmF6ZW0gcG9kemllbGlteSBvYnNlcndhY2plIG5hIGR3YSB6ZXN0YXd5IC0gdHJlbmluZ293eSBpIHdhbGlkYWN5am55LgoKYGBge3J9CnNldC5zZWVkKDQ0KQp0cmVuaW5nNDQgPC0gc2FtcGxlKDE6bnJvdyhkYW5lKSwgOTAwMCkKZml0NDQgPC0gcmVnc3Vic2V0cyhjZW5hfi4sIGRhbmVbdHJlbmluZzQ0LCBdLCBudm1heCA9IDExLCBtZXRob2QgPSAiZm9yd2FyZCIpCmBgYAoKVGVyYXogZG9rb25hbXkgcHJlZHlrY2ppIG5hIG9ic2Vyd2FjamFjaCB6IHplc3Rhd3UgdGVzdG93ZWdvLgoKYGBge3J9CnRlc3Q0NCA8LSBtb2RlbC5tYXRyaXgoY2VuYX4uLCBkYW5lWy10cmVuaW5nNDQsIF0pCnZhbEJsYWQgPC0KICAxOmxlbmd0aChkYW5lKSAlPiUKICBzYXBwbHkoCiAgICBmdW5jdGlvbih4KSB7CiAgICAgIGNvZWZpIDwtIGNvZWYoZml0NDQsIGlkID0geCkKICAgICAgcHJlZCA8LSB0ZXN0NDRbLCBuYW1lcyhjb2VmaSldJSolY29lZmkKICAgICAgbWVhbigoZGFuZSRjZW5hWy10cmVuaW5nNDRdLXByZWQpXjIpCiAgICB9CiAgKQpwbG90KAogIHNxcnQodmFsQmxhZCksCiAgeWxpbSA9IGMoNDAwLCA5MDApLAogIHhsYWIgPSAiUm96bWlhciBtb2RlbHUiLAogIHlsYWIgPSAixZpyZWRuaWEga3dhZHJhdG93YSBixYLEmWTDs3ciLAogIHBjaCA9IDE5LAogIHR5cGUgPSAiYiIKKQpwb2ludHMoc3FydChmaXQ0NCRyc3NbLTFdLzkwMDApLCBjb2wgPSAicmVkIiwgcGNoID0gMTksIHR5cGUgPSAiYiIpCmxlZ2VuZCgKICAidG9wcmlnaHQiLAogIGxlZ2VuZCA9IGMoIlRyZW5pbmciLCAiV2FsaWRhY2phIiksCiAgY29sID0gYygicmVkIiwgImJsYWNrIiksCiAgcGNoID0gMTkKKQpgYGAKCk5hIHBvd3nFvHN6eW0gd3lrcmVzaWUgbW/FvG5hIHphdXdhxbx5xIcsIMW8ZSBwb21pbW8ga29uc2Vrd2VudG5lZ28gc3BhZGt1IGLFgsSZZHUgdHJlbmluZ293ZWdvLCBqdcW8IHByenkgcm96bWlhcnplIG1vZGVsdSB3eW5vc3rEhWN5bSAzIGLFgsSFZCB3YWxpZGFjamkgd3lwxYJhc3pjemEgc2nEmS4KCk5hIGtvbmllYyBvcGVyYWNqZSBwcm93YWR6xIVjZSBkbyBvdHJ6eW1hbmlhIHRha2llZ28gcmV6dWx0YXR1IHpvc3RhbsSFIHVicmFuZSB3IGplZG5hIGZ1bmtjasSZLgoKYGBge3J9CiMgdGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHJ1bnRpbWU6IHNoaW55LCBvdGhlcndpc2UgT0sKCnByZWRpY3QucmVnc3Vic2V0cyA8LQogIGZ1bmN0aW9uKG9iaWVrdCwgZm9ybXVsYSwgZGFuZSwgaWQsIC4uLikgewogICAgIyBmb3JtIDwtIGFzLmZvcm11bGEob2JpZWt0JGNhbGxbWzJdXSkgIyBvYmplY3Qgb2YgdHlwZSAnc3ltYm9sJyBpcyBub3Qgc3Vic2V0dGFibGUKICAgICMgZm9ybSA8LSBhcy5mb3JtdWxhKGNlbmEgfiAuKSB3b3JrcywgYnV0IG5vdCBzYXRpc2ZhY3RvcnksIHdoYXQgaWYgZm9ybXVsYSBpcyBkaWZmZXJlbnQ/CiAgICAjIGZvcm0gPC0gb2JpZWt0JGNhbGxbWzJdXSAjIG9iamVjdCBvZiB0eXBlICdzeW1ib2wnIGlzIG5vdCBzdWJzZXR0YWJsZQogICAgIyBmb3JtIDwtIG9iaWVrdCRjYWxsICU+JSBhcy5jaGFyYWN0ZXIoKSAlPiUgLlsyXSAlPiUgYXMuZm9ybXVsYSgpICMgb2JqZWN0ICdleHByJyBub3QgZm91bmQKICAgICMgZm9ybSA8LSBhcy5mb3JtdWxhKG9iaWVrdCRjYWxsICU+JSBhcy5jaGFyYWN0ZXIoKSAlPiUgLlsyXSkgIyBvYmplY3QgJ2V4cHInIG5vdCBmb3VuZAogICAgbWF0IDwtIG1vZGVsLm1hdHJpeChmb3JtdWxhLCBkYW5lKQogICAgIyBtYXQgPC0gbW9kZWwubWF0cml4KGZvcm0sIGRhbmUpCiAgICBjb2VmaSA8LSBjb2VmKG9iaWVrdCwgaWQgPSBpZCkKICAgIG1hdFssIG5hbWVzKGNvZWZpKV0lKiVjb2VmaQogIH0KYGBgCgojIyMgS3Jvc3dhbGlkYWNqYQoKVHltIHJhemVtIGRvYmllcnplbXkgbW9kZWwga29yenlzdGFqxIVjIHogMTAga3JvdG5laiBrcm9zd2FsaWRhY2ppLgoKYGBge3J9CnNldC5zZWVkKDQ1KQpmb2xkcyA8LSBzYW1wbGUocmVwKDE6MTAsIGxlbmd0aCA9IG5yb3coZGFuZSkpKQp0YWJsZShmb2xkcykKY3ZCbGVkeSA8LSBtYXRyaXgoTkEsIDEwLCAxMSkKZm9yIChrIGluIDE6MTApIHsKICBmb3JtIDwtIGFzLmZvcm11bGEoY2VuYX4uKQogIGJlc3QuZml0IDwtIHJlZ3N1YnNldHMoZm9ybSwgZGFuZVtmb2xkcyE9aywgXSwgbnZtYXggPSAxMSwgbWV0aG9kID0gImZvcndhcmQiKQogIGZvciAoaSBpbiAxOmxlbmd0aChkYW5lKSkgewogICAgcHJlZCA8LSBwcmVkaWN0LnJlZ3N1YnNldHMoYmVzdC5maXQsIGZvcm0sIGRhbmVbZm9sZHM9PWssIF0sIGlkID0gaSkKICAgIGN2QmxlZHlbaywgaV0gPC0gbWVhbigoZGFuZSRjZW5hW2ZvbGRzPT1rXS1wcmVkKV4yKQogIH0KfQpybXNlLmN2IDwtIHNxcnQoYXBwbHkoY3ZCbGVkeSwgMiwgbWVhbikpCgpwbG90KAogIHNxcnQodmFsQmxhZCksCiAgeWxpbSA9IGMoNDAwLCA5MDApLAogIHhsYWIgPSAiUm96bWlhciBtb2RlbHUiLAogIHlsYWIgPSAixZpyZWRuaWEga3dhZHJhdG93YSBixYLEmWTDs3ciLAogIHBjaCA9IDE5LAogIHR5cGUgPSAiYiIKKQpwb2ludHMoc3FydChmaXQ0NCRyc3NbLTFdLzkwMDApLCBjb2wgPSAicmVkIiwgcGNoID0gMTksIHR5cGUgPSAiYiIpCnBvaW50cyhybXNlLmN2LCBjb2wgPSAiYmx1ZSIsIHBjaCA9IDE5LCB0eXBlID0gImIiKQpsZWdlbmQoCiAgInRvcHJpZ2h0IiwKICBsZWdlbmQgPSBjKCIxMCBrcm90bmEgS3Jvc3dhbGlkYWNqYSIsICJUcmVuaW5nIiwgIldhbGlkYWNqYSIpLAogIGNvbCA9IGMoImJsdWUiLCAicmVkIiwgImJsYWNrIiksCiAgcGNoID0gMTkKKQpgYGAKCiMjIyBSZWd1bGFyeXphY2phIFRpY2hvbm93YQoKVyBwcnplcHJvd2FkemVuaXUgUmlkZ2UgUmVncmVzc2lvbiBwb21vxbxlIG5hbSBwYWtpZXQgYGdsbW5ldGAuCgpgYGB7cn0KbGlicmFyeShnbG1uZXQpCmBgYAoKYGdsbW5ldGAgbmllIGtvcnp5c3RhIHogasSZenlrYSBmb3JtdcWCeS4gVHJ6ZWJhIHphdGVtIHBvZHppZWxpxIcgZGFuZSBuYSB6ZXN0YXcgcGVkeWt0b3LDs3cgaSBvZHBvd2llZHppLiBaYW5pbSBwcnp5c3TEhXBpbXkgZG8gZHppYcWCYW5pYSBuYWxlxbx5IHRlxbwgem5vcm1hbGl6b3dhxIcgZGFuZSAobnAuIHNwcm93YWR6acSHIGplIGRvIHByemVkemlhxYJ5ICgtMywgMykgb2Rlam11asSFYyDFm3JlZG5pxIUgb2Qgd2FydG/Fm2NpIGkgZHppZWzEhWMgcHJ6ZXogb2RjaHlsZW5pZSBzdGFuZGFyZG93ZSkuCgpgYGB7cn0KZGFuZU5vcm0gPC0KICBkYW5lICU+JQogIG11dGF0ZSgKICAgIGNlbmEgPSAoY2VuYS1tZWFuKGNlbmEpKS9tYXgoY2VuYSksCiAgICB3aWVsa29zYyA9ICh3aWVsa29zYy1tZWFuKHdpZWxrb3NjKSkvbWF4KHdpZWxrb3NjKSwKICAgIGxpY3piYV93eXJhem93ID0gKGxpY3piYV93eXJhem93LW1lYW4obGljemJhX3d5cmF6b3cpKS9tYXgobGljemJhX3d5cmF6b3cpCiAgKQoKeCA8LSBtb2RlbC5tYXRyaXgoY2VuYX4uLTEsIGRhbmUpCnkgPC0gZGFuZSRjZW5hCnhuIDwtIG1vZGVsLm1hdHJpeChjZW5hfi4tMSwgZGFuZU5vcm0pCnluIDwtIGRhbmVOb3JtJGNlbmEKCmZpdDQ1IDwtIGdsbW5ldCh4LCB5LCBhbHBoYSA9IDApCnBsb3QoZml0NDUsIHh2YXIgPSAibGFtYmRhIiwgbGFiZWwgPSBUUlVFKQpwbG90KGZpdDQ1LCB4dmFyID0gImRldiIsIGxhYmVsID0gVFJVRSkKCmN2UmlkZ2UgPC0gY3YuZ2xtbmV0KHgsIHksIGFscGhhID0gMCkKcGxvdChjdlJpZGdlKQoKZml0NDUgPC0gZ2xtbmV0KHhuLCB5biwgYWxwaGEgPSAwKQpwbG90KGZpdDQ1LCB4dmFyID0gImxhbWJkYSIsIGxhYmVsID0gVFJVRSkKcGxvdChmaXQ0NSwgeHZhciA9ICJkZXYiLCBsYWJlbCA9IFRSVUUpCgpjdlJpZGdlIDwtIGN2LmdsbW5ldCh4biwgeW4sIGFscGhhID0gMCkKcGxvdChjdlJpZGdlKQpgYGAKClJpZGdlIFJlZ3Jlc3Npb24gY2hhcmFrdGVyeXp1amUgc2nEmSBjesWCb25lbSB6d2nEhXphbnltIHogcmVndWxhcnl6YWNqxIUuIE96bmFjemEgdG8sIMW8ZSBkbGEgZHXFvGVqIHdhcnRvxZtjaSB3c3DDs8WCY3p5bm5pa2EgcmVndWxhcnl6YWNqaSBsYW1iZGEgYsSZZMSFIG11c2lhxYJ5IHd5c3TEmXBvd2HEhyBvZHBvd2llZG5pbyBtYcWCZSB3c3DDs8WCY3p5bm5pa2kgQmV0YS4gVGVuIHR5cCByZWdyZXNqaSBvcGllcmEgc2nEmSB3acSZYyBuYSB3c3p5c3RraWNoIHByZWR5a3RvcmFjaC4gTWluaW1hbGl6dWplIHR5bGtvIGljaCB3c3DDs8WCY3p5bm5pa2kuCgpOYSBwb3d5xbxzenljaCB3eWtyZXNhY2ggd2lkYcSHLCDFvGUgZGxhIGR1xbxlaiBsYW1iZHkgd3Nww7PFgmN6eW5uaWtpIEJldGEgem9zdGFqxIUgbmllbWFsxbxlIHd5emVyb3dhbmUgb3JheiDFvGUgbmFqbW5pZWpzenkgYsWCxIVkIG90cnp5bXVqZW15IGRsYSBuYWptbmllanN6ZWogd2FydG/Fm2NpIGxhbWJkYS4gT3puYWN6YSB0bywgxbxlIHVkemlhxYIga2HFvGRlZ28geiBjenlubmlrw7N3IGplc3QgaXN0b3RueSBkbGEgYnVkb3dhbmVnbyBtb2RlbHUgKHBvc2lhZGEgb2Rwb3dpZWRuaW8gZHXFvHkgc3RvasSFY3kgcHJ6eSBuaW0gd3Nww7PFgmN6eW5uaWsgQmV0YSkuIFBvdHdpZXJkemEgdG8gd2nEmWMgcG9wcnplZG5pZSBvYnNlcndhY2plLCBnZHppZSBuYWpza3V0ZWN6bmllanN6eSBtb2RlbCBrb3J6eXN0YcWCIHplIHdzenlzdGtpY2ggMTEgcHJlZHlrdG9yw7N3LiBGcmFjdGlvbiBEZXZpYW5jZSBFeHBsYWluZWQgamVzdCBqYWsgUl4yLgoKIyMjIExhc3NvCgpMYXNzbyBjenlsaSBgTGVhc3QgQWJzb2x1dGUgU2hyaW5rYWdlIGFuZCBTZWxlY3Rpb24gT3BlcmF0b3JgIHLDs8W8bmkgc2nEmSBvZCBwb3ByemVkbmllaiBtZXRvZHkgZWxlbWVudGVtIHJlZ3VsdWrEhWN5bS4gVHltIHJhemVtIHdhcnRvxZtjaSBCZXRhIG1vZ8SFIHpvc3RhxIcgc3Byb3dhZHpvbmUgZG8gemVyYSwgcHJ6ZXogY28gY3rEmcWbxIcgcHJlZHlrdG9yw7N3IG1vxbxlIG5pZSB3emnEhcSHIHVkemlhxYJ1IHcgYnVkb3dpZSBtb2RlbHUuCgpgYGB7cn0KZml0NDYgPC0gZ2xtbmV0KHgsIHkpCnBsb3QoZml0NDYsIHh2YXIgPSAibGFtYmRhIiwgbGFiZWwgPSBUUlVFKQpwbG90KGZpdDQ2LCB4dmFyID0gImRldiIsIGxhYmVsID0gVFJVRSkKCmN2TGFzc28gPC0gY3YuZ2xtbmV0KHgsIHkpCnBsb3QoY3ZMYXNzbykKCmZpdDQ3IDwtIGdsbW5ldCh4biwgeW4pCnBsb3QoZml0NDcsIHh2YXIgPSAibGFtYmRhIiwgbGFiZWwgPSBUUlVFKQpwbG90KGZpdDQ3LCB4dmFyID0gImRldiIsIGxhYmVsID0gVFJVRSkKCmN2TGFzc29OIDwtIGN2LmdsbW5ldCh4biwgeW4pCnBsb3QoY3ZMYXNzb04pCgooY29lZihjdkxhc3NvTikgJT4lIGFzLnZlY3RvcigpICE9IDApICU+JSBzdW0oKQpgYGAKCk5hIHNhbSBrb25pZWMgc3Byw7NidWpteSBqZXN6Y3plIGRvYnJhxIcgcGFyYW1ldHIgbGFtYmRhIHphIHBvbW9jxIUgbWV0b2R5IHdhbGlkYWNqaSAod2N6ZcWbbmllanN6eSBzZXQgdHJlbmluZ293eSBpIHNldCB0ZXN0b3d5KS4KCmBgYHtyfQpsYXNzby50ciA8LSBnbG1uZXQoeFt0cmVuaW5nNDQsIF0sIHlbdHJlbmluZzQ0XSkKbGFzc28udHIKcHJlZCA8LSBwcmVkaWN0KGxhc3NvLnRyLCB4Wy10cmVuaW5nNDQsIF0pCmRpbShwcmVkKQpybXNlIDwtIHNxcnQoYXBwbHkoKHlbLXRyZW5pbmc0NF0tcHJlZCleMiwgMiwgbWVhbikpCnBsb3QobG9nKGxhc3NvLnRyJGxhbWJkYSksIHJtc2UsIHR5cGUgPSAiYiIsIHhsYWIgPSAiTG9nKGxhbWJkYSkiKQpsYW0uYmVzdCA8LSBsYXNzby50ciRsYW1iZGFbb3JkZXIocm1zZSlbMV1dCmxhbS5iZXN0CmxhbS5iZXN0ICU+JSBsb2coKQpjb2VmKGxhc3NvLnRyLCBzID0gbGFtLmJlc3QpCmBgYAoKTW/FvG5hIHphdXdhxbx5xIcsIMW8ZSB3IHR5bSB3eXBhZGt1IG90cnp5bWFsacWbbXkgbW9kZWwsIGt0w7NyeSBuaWUgamVzdCBuYWpsZXBzenltIHogbW/FvGxpd3ljaCwgYWxlIHRlxbwgbmllIGplc3QgZ29yc3p5IG5pxbwgbmFqYmFyZHppZWogZWxhc3R5Y3pueSBwcm9wb25vd2FueSBwcnpleiBrcm9zd2FsaWRhY2rEmS4=